diff --git a/Makefile.am b/Makefile.am index 9e6dcdc5553ae8f8b76b71bb90c6d58851cabe95..4c70c7846c0e5783bc946711e8f9900b12e35296 100644 --- a/Makefile.am +++ b/Makefile.am @@ -81,6 +81,7 @@ DIRS = \ qa \ test \ test/data \ + test/data/ovfdata \ tools BUILDTIME_DIR_AUTOCREATE = \ @@ -640,6 +641,23 @@ TEST_FILES = \ test/data/proc_drbd83_sync.txt \ test/data/proc_drbd83_sync_krnl2.6.39.txt \ test/data/sys_drbd_usermode_helper.txt \ + test/data/ovfdata/compr_disk.vmdk.gz \ + test/data/ovfdata/corrupted_resources.ovf \ + test/data/ovfdata/empty.ovf \ + test/data/ovfdata/ganeti.mf \ + test/data/ovfdata/ganeti.ovf \ + test/data/ovfdata/gzip_disk.ovf \ + test/data/ovfdata/new_disk.vmdk \ + test/data/ovfdata/no_disk_in_ref.ovf \ + test/data/ovfdata/no_ovf.ova \ + test/data/ovfdata/ova.ova \ + test/data/ovfdata/second_disk.vmdk \ + test/data/ovfdata/virtualbox.ovf \ + test/data/ovfdata/wrong_extension.ovd \ + test/data/ovfdata/wrong_manifest.mf \ + test/data/ovfdata/wrong_manifest.ovf \ + test/data/ovfdata/wrong_ova.ova \ + test/data/ovfdata/wrong_xml.ovf \ test/import-export_unittest-helper python_tests = \ @@ -674,6 +692,7 @@ python_tests = \ test/ganeti.netutils_unittest.py \ test/ganeti.objects_unittest.py \ test/ganeti.opcodes_unittest.py \ + test/ganeti.ovf_unittest.py \ test/ganeti.qlang_unittest.py \ test/ganeti.query_unittest.py \ test/ganeti.rapi.baserlib_unittest.py \ diff --git a/test/data/ovfdata/compr_disk.vmdk.gz b/test/data/ovfdata/compr_disk.vmdk.gz new file mode 100644 index 0000000000000000000000000000000000000000..3fcb2de28f8c875d3066e880085fdc393346d3c7 Binary files /dev/null and b/test/data/ovfdata/compr_disk.vmdk.gz differ diff --git a/test/data/ovfdata/corrupted_resources.ovf b/test/data/ovfdata/corrupted_resources.ovf new file mode 100644 index 0000000000000000000000000000000000000000..480de2b28329e18a20f028f7bd1f3db7f3544ccc --- /dev/null +++ b/test/data/ovfdata/corrupted_resources.ovf @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generated by VMware ovftool 2.0.1 (build-260188), User: , UTC time: 2011-08-17T15:12:11.715742Z--> +<Envelope vmw:buildId="build-260188" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + <File ovf:href="other_disk.vmdk" ovf:id="file1" ovf:size="761627136"/> + </References> + <DiskSection> + <Info>Virtual disk information</Info> + <Disk ovf:capacity="16514" ovf:capacityAllocationUnits="byte * 2^20" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="2042953728"/> + </DiskSection> + <NetworkSection> + <Info>The list of logical networks</Info> + <Network ovf:name="bridged"> + <Description>The bridged network</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="vm"> + <Info>A virtual machine</Info> + <Name>AyertiennaSUSE.x86_64-0.0.2</Name> + <OperatingSystemSection ovf:id="83" vmw:osType="suse64Guest"> + <Info>The kind of installed guest operating system</Info> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>AyertiennaSUSE.x86_64-0.0.2</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>vmx-04</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Description>Number of Virtual CPUs</rasd:Description> + <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>512MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>512</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>SCSI Controller</rasd:Description> + <rasd:ElementName>scsiController0</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>lsilogic</rasd:ResourceSubType> + <rasd:ResourceType>6</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>8</rasd:InstanceID> + <rasd:Parent>4</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>2</rasd:AddressOnParent> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection>bridged</rasd:Connection> + <rasd:Description>E1000 ethernet adapter on "bridged"</rasd:Description> + <rasd:ElementName>ethernet0</rasd:ElementName> + <rasd:InstanceID>9</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> + diff --git a/test/data/ovfdata/empty.ovf b/test/data/ovfdata/empty.ovf new file mode 100644 index 0000000000000000000000000000000000000000..b1b05f36415ea8d0e35062747290264c8fd00b90 --- /dev/null +++ b/test/data/ovfdata/empty.ovf @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + </References> + <DiskSection> + </DiskSection> + <NetworkSection> + </NetworkSection> + <VirtualSystem> + <Info>A virtual machine</Info> + <OperatingSystemSection> + </OperatingSystemSection> + <VirtualHardwareSection> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/ganeti.mf b/test/data/ovfdata/ganeti.mf new file mode 100644 index 0000000000000000000000000000000000000000..107ec2b2599a69315f9ec303b1a6adef613bfaa3 --- /dev/null +++ b/test/data/ovfdata/ganeti.mf @@ -0,0 +1,2 @@ +SHA1(ganeti.ovf)= d298200d9044c54b0fde13efaa90e564badc5961 +SHA1(new_disk.vmdk)= 711c48f14c934228b8e117d036c913cdb9d63305 diff --git a/test/data/ovfdata/ganeti.ovf b/test/data/ovfdata/ganeti.ovf new file mode 100644 index 0000000000000000000000000000000000000000..e664da80dcd306173fe966f61179948e624d9c5e --- /dev/null +++ b/test/data/ovfdata/ganeti.ovf @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gnt="http://ganeti"> + <References> + <File ovf:href="new_disk.vmdk" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + </DiskSection> + <gnt:GanetiSection> + <gnt:Version>0</gnt:Version> + <gnt:AutoBalance>False</gnt:AutoBalance> + <gnt:Tags></gnt:Tags> + <gnt:DiskTemplate>plain</gnt:DiskTemplate> + <gnt:OperatingSystem> + <gnt:Name>lenny-image</gnt:Name> + </gnt:OperatingSystem> + <gnt:Network> + <gnt:Nic ovf:name="routed"> + <gnt:Mode>bridged</gnt:Mode> + <gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:MACAddress> + <gnt:IPAddress>none</gnt:IPAddress> + <gnt:Link>xen-br0</gnt:Link> + </gnt:Nic> + </gnt:Network> + <gnt:Hypervisor> + <gnt:Name>xen-pvm</gnt:Name> + <gnt:Parameters> + <gnt:root-path>/dev/sda</gnt:root-path> + <gnt:kernel_args>ro</gnt:kernel_args> + </gnt:Parameters> + </gnt:Hypervisor> + </gnt:GanetiSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="routed"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="New-shiny-instance"> + <Info>A virtual machine</Info> + <Name>ganeti-test-xen</Name> + <OperatingSystemSection ovf:id="93"> + <Info>The kind of installed guest operating system</Info> + <Description>Ubuntu</Description> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>Ubuntu-freshly-created</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:Caption>1 virtual CPU</rasd:Caption> + <rasd:ElementName>1 virtual CPU</rasd:ElementName> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>2048 MB of memory</rasd:Caption> + <rasd:ElementName>2048 MB of memory</rasd:ElementName> + <rasd:Description>Memory Size</rasd:Description> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:VirtualQuantity>2048</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>10</rasd:ResourceType> + <rasd:ResourceSubType>PCNet32</rasd:ResourceSubType> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection></rasd:Connection> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/gzip_disk.ovf b/test/data/ovfdata/gzip_disk.ovf new file mode 100644 index 0000000000000000000000000000000000000000..44fc5def7eee5effed5987f4e1f8eb288c7bcf55 --- /dev/null +++ b/test/data/ovfdata/gzip_disk.ovf @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gnt="http://ganeti"> + <References> + <File ovf:href="compr_disk.vmdk.gz" ovf:compression="gzip" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + </DiskSection> + <gnt:GanetiSection> + <gnt:Version>0</gnt:Version> + <gnt:AutoBalance>False</gnt:AutoBalance> + <gnt:Tags></gnt:Tags> + <gnt:DiskTemplate>plain</gnt:DiskTemplate> + <gnt:OperatingSystem> + <gnt:Name>lenny-image</gnt:Name> + </gnt:OperatingSystem> + <gnt:Network> + <gnt:Nic ovf:name="routed"> + <gnt:Mode>bridged</gnt:Mode> + <gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:MACAddress> + <gnt:IPAddress>none</gnt:IPAddress> + <gnt:Link>xen-br0</gnt:Link> + </gnt:Nic> + </gnt:Network> + <gnt:Hypervisor> + <gnt:Name>xen-pvm</gnt:Name> + <gnt:Parameters> + <gnt:root-path>/dev/sda</gnt:root-path> + <gnt:kernel_args>ro</gnt:kernel_args> + </gnt:Parameters> + </gnt:Hypervisor> + </gnt:GanetiSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="routed"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="New-shiny-instance"> + <Info>A virtual machine</Info> + <Name>ganeti-test-xen</Name> + <OperatingSystemSection ovf:id="93"> + <Info>The kind of installed guest operating system</Info> + <Description>Ubuntu</Description> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>Ubuntu-freshly-created</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:Caption>1 virtual CPU</rasd:Caption> + <rasd:ElementName>1 virtual CPU</rasd:ElementName> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>2048 MB of memory</rasd:Caption> + <rasd:ElementName>2048 MB of memory</rasd:ElementName> + <rasd:Description>Memory Size</rasd:Description> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:VirtualQuantity>2048</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>10</rasd:ResourceType> + <rasd:ResourceSubType>PCNet32</rasd:ResourceSubType> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection></rasd:Connection> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/new_disk.vmdk b/test/data/ovfdata/new_disk.vmdk new file mode 100644 index 0000000000000000000000000000000000000000..5047100c210107b8c3394099becc933cb59dcb32 Binary files /dev/null and b/test/data/ovfdata/new_disk.vmdk differ diff --git a/test/data/ovfdata/no_disk_in_ref.ovf b/test/data/ovfdata/no_disk_in_ref.ovf new file mode 100644 index 0000000000000000000000000000000000000000..1aa8afc9268636561b93fe599664ce54ce0d6489 --- /dev/null +++ b/test/data/ovfdata/no_disk_in_ref.ovf @@ -0,0 +1,88 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + <File ovf:href="second_disk.vmdk" ovf:id="file2"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + <Disk ovf:diskId="vmdisk2" ovf:fileRef="file2" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="Ubuntu-freshly-created"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="93"> + <Info>The kind of installed guest operating system</Info> + <Description>Ubuntu</Description> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>Ubuntu-freshly-created</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:Caption>1 virtual CPU</rasd:Caption> + <rasd:ElementName>1 virtual CPU</rasd:ElementName> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>2048 MB of memory</rasd:Caption> + <rasd:ElementName>2048 MB of memory</rasd:ElementName> + <rasd:Description>Memory Size</rasd:Description> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:VirtualQuantity>2048</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:Address>1</rasd:Address> + </Item> + <Item> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>10</rasd:ResourceType> + <rasd:ResourceSubType>PCNet32</rasd:ResourceSubType> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection>NAT</rasd:Connection> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>9</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/no_ovf.ova b/test/data/ovfdata/no_ovf.ova new file mode 100644 index 0000000000000000000000000000000000000000..207b571836f8d8ec6f9886dcf83fb71ac0b25b30 Binary files /dev/null and b/test/data/ovfdata/no_ovf.ova differ diff --git a/test/data/ovfdata/ova.ova b/test/data/ovfdata/ova.ova new file mode 100644 index 0000000000000000000000000000000000000000..856de9637663bb897ecc067499a9ae1ab5deda1b Binary files /dev/null and b/test/data/ovfdata/ova.ova differ diff --git a/test/data/ovfdata/second_disk.vmdk b/test/data/ovfdata/second_disk.vmdk new file mode 100644 index 0000000000000000000000000000000000000000..4ba0fffd911afa1bf2fe692dc6cc8f01b4256223 Binary files /dev/null and b/test/data/ovfdata/second_disk.vmdk differ diff --git a/test/data/ovfdata/virtualbox.ovf b/test/data/ovfdata/virtualbox.ovf new file mode 100644 index 0000000000000000000000000000000000000000..dba291996efe2bdbfa5b7d1fb7e36cdd9b493b88 --- /dev/null +++ b/test/data/ovfdata/virtualbox.ovf @@ -0,0 +1,89 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + <File ovf:href="new_disk.vmdk" ovf:id="file1"/> + <File ovf:href="second_disk.vmdk" ovf:id="file2"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + <Disk ovf:diskId="vmdisk2" ovf:fileRef="file2" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="bridged"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="Ubuntu-freshly-created"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="93"> + <Info>The kind of installed guest operating system</Info> + <Description>Ubuntu</Description> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>Ubuntu-freshly-created</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:Caption>1 virtual CPU</rasd:Caption> + <rasd:ElementName>1 virtual CPU</rasd:ElementName> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>2048 MB of memory</rasd:Caption> + <rasd:ElementName>2048 MB of memory</rasd:ElementName> + <rasd:Description>Memory Size</rasd:Description> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:VirtualQuantity>2048</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:Address>1</rasd:Address> + </Item> + <Item> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>10</rasd:ResourceType> + <rasd:ResourceSubType>PCNet32</rasd:ResourceSubType> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection>bridged</rasd:Connection> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>9</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/wrong_extension.ovd b/test/data/ovfdata/wrong_extension.ovd new file mode 100644 index 0000000000000000000000000000000000000000..e1e8709925d3a5ffbb542a578e6ed4d5095d5696 --- /dev/null +++ b/test/data/ovfdata/wrong_extension.ovd @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generated by VMware ovftool 2.0.1 (build-260188), User: , UTC time: 2011-08-17T15:12:11.715742Z--> +<Envelope vmw:buildId="build-260188" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + <File ovf:href="AyertiennaSUSE.x86_64-0.0.2-disk1.vmdk" ovf:id="file1" ovf:size="761627136"/> + </References> + <DiskSection> + <Info>Virtual disk information</Info> + <Disk ovf:capacity="16514" ovf:capacityAllocationUnits="byte * 2^20" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="2042953728"/> + </DiskSection> + <NetworkSection> + <Info>The list of logical networks</Info> + <Network ovf:name="bridged"> + <Description>The bridged network</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="vm"> + <Info>A virtual machine</Info> + <Name>AyertiennaSUSE.x86_64-0.0.2</Name> + <OperatingSystemSection ovf:id="83" vmw:osType="suse64Guest"> + <Info>The kind of installed guest operating system</Info> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>AyertiennaSUSE.x86_64-0.0.2</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>vmx-04</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Description>Number of Virtual CPUs</rasd:Description> + <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>512MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>512</rasd:VirtualQuantity> + </Item> + <Item ovf:required="false"> + <rasd:Address>0</rasd:Address> + <rasd:Description>USB Controller</rasd:Description> + <rasd:ElementName>usb</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceType>23</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>SCSI Controller</rasd:Description> + <rasd:ElementName>scsiController0</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>lsilogic</rasd:ResourceSubType> + <rasd:ResourceType>6</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item ovf:required="false"> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation> + <rasd:Description>Floppy Drive</rasd:Description> + <rasd:ElementName>floppy0</rasd:ElementName> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:ResourceType>14</rasd:ResourceType> + </Item> + <Item ovf:required="false"> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation> + <rasd:ElementName>cdrom1</rasd:ElementName> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:Parent>5</rasd:Parent> + <rasd:ResourceType>15</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>8</rasd:InstanceID> + <rasd:Parent>4</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>2</rasd:AddressOnParent> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection>bridged</rasd:Connection> + <rasd:Description>E1000 ethernet adapter on "bridged"</rasd:Description> + <rasd:ElementName>ethernet0</rasd:ElementName> + <rasd:InstanceID>9</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/wrong_manifest.mf b/test/data/ovfdata/wrong_manifest.mf new file mode 100644 index 0000000000000000000000000000000000000000..7bd40057436898aa2f7dd7570eaf1fbf77292d68 --- /dev/null +++ b/test/data/ovfdata/wrong_manifest.mf @@ -0,0 +1,2 @@ +SHA1(new_disk.vmdk)= 0500304662fb8a6a7925b5a43bc0e05d6a03720d +SHA1(wrong_manifest.ovf)= 0500304662fb8a6a7965b5a43bc0e05d6a03720d diff --git a/test/data/ovfdata/wrong_manifest.ovf b/test/data/ovfdata/wrong_manifest.ovf new file mode 100644 index 0000000000000000000000000000000000000000..6883d737eae9a952a68331c8711e7a2ce8c5f4c4 --- /dev/null +++ b/test/data/ovfdata/wrong_manifest.ovf @@ -0,0 +1,98 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gnt="http://ganeti"> + <References> + <File ovf:href="new_disk.vmdk" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/specifications/vmdk.html#sparse"/> + </DiskSection> + <gnt:GanetiSection> + <gnt:VersionId>0</gnt:VersionId> + <gnt:AutoBalance>False</gnt:AutoBalance> + <gnt:Tags></gnt:Tags> + <gnt:OS> + <gnt:Name>lenny-image</gnt:Name> + </gnt:OS> + <gnt:Network> + <gnt:Mode>bridged</gnt:Mode> + <gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:MACAddress> + <gnt:IPAddress>None</gnt:IPAddress> + <gnt:Link>xen-br0</gnt:Link> + </gnt:Network> + <gnt:Hypervisor> + <gnt:Name>xen-pvm</gnt:Name> + <gnt:Parameters> + <gnt:root-path>/dev/sda</gnt:root-path> + <gnt:kernel_args>ro</gnt:kernel_args> + </gnt:Parameters> + </gnt:Hypervisor> + </gnt:GanetiSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="bridged network"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="New-shiny-instance"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="93"> + <Info>The kind of installed guest operating system</Info> + <Description>Ubuntu</Description> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>Ubuntu-freshly-created</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:Caption>1 virtual CPU</rasd:Caption> + <rasd:ElementName>1 virtual CPU</rasd:ElementName> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>2048 MB of memory</rasd:Caption> + <rasd:ElementName>2048 MB of memory</rasd:ElementName> + <rasd:Description>Memory Size</rasd:Description> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:VirtualQuantity>2048</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:Address>1</rasd:Address> + </Item> + <Item> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>10</rasd:ResourceType> + <rasd:ResourceSubType>PCNet32</rasd:ResourceSubType> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection>bridged network</rasd:Connection> + </Item> + <Item> + <rasd:Caption>disk1</rasd:Caption> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:Description>Disk Image</rasd:Description> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:ResourceType>17</rasd:ResourceType> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:Parent>3</rasd:Parent> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/wrong_ova.ova b/test/data/ovfdata/wrong_ova.ova new file mode 100644 index 0000000000000000000000000000000000000000..e1e8709925d3a5ffbb542a578e6ed4d5095d5696 --- /dev/null +++ b/test/data/ovfdata/wrong_ova.ova @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generated by VMware ovftool 2.0.1 (build-260188), User: , UTC time: 2011-08-17T15:12:11.715742Z--> +<Envelope vmw:buildId="build-260188" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + <File ovf:href="AyertiennaSUSE.x86_64-0.0.2-disk1.vmdk" ovf:id="file1" ovf:size="761627136"/> + </References> + <DiskSection> + <Info>Virtual disk information</Info> + <Disk ovf:capacity="16514" ovf:capacityAllocationUnits="byte * 2^20" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="2042953728"/> + </DiskSection> + <NetworkSection> + <Info>The list of logical networks</Info> + <Network ovf:name="bridged"> + <Description>The bridged network</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="vm"> + <Info>A virtual machine</Info> + <Name>AyertiennaSUSE.x86_64-0.0.2</Name> + <OperatingSystemSection ovf:id="83" vmw:osType="suse64Guest"> + <Info>The kind of installed guest operating system</Info> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>AyertiennaSUSE.x86_64-0.0.2</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>vmx-04</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Description>Number of Virtual CPUs</rasd:Description> + <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>512MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>512</rasd:VirtualQuantity> + </Item> + <Item ovf:required="false"> + <rasd:Address>0</rasd:Address> + <rasd:Description>USB Controller</rasd:Description> + <rasd:ElementName>usb</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceType>23</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>SCSI Controller</rasd:Description> + <rasd:ElementName>scsiController0</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>lsilogic</rasd:ResourceSubType> + <rasd:ResourceType>6</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item ovf:required="false"> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation> + <rasd:Description>Floppy Drive</rasd:Description> + <rasd:ElementName>floppy0</rasd:ElementName> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:ResourceType>14</rasd:ResourceType> + </Item> + <Item ovf:required="false"> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation> + <rasd:ElementName>cdrom1</rasd:ElementName> + <rasd:InstanceID>7</rasd:InstanceID> + <rasd:Parent>5</rasd:Parent> + <rasd:ResourceType>15</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>8</rasd:InstanceID> + <rasd:Parent>4</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>2</rasd:AddressOnParent> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Connection>bridged</rasd:Connection> + <rasd:Description>E1000 ethernet adapter on "bridged"</rasd:Description> + <rasd:ElementName>ethernet0</rasd:ElementName> + <rasd:InstanceID>9</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> diff --git a/test/data/ovfdata/wrong_xml.ovf b/test/data/ovfdata/wrong_xml.ovf new file mode 100644 index 0000000000000000000000000000000000000000..f98b9c84933863238cb1c05c2bfca7f51cf51caa --- /dev/null +++ b/test/data/ovfdata/wrong_xml.ovf @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Generated by VMware ovftool 2.0.1 (build-260188), User: , UTC time: 2011-08-17T15:12:11.715742Z--> +<Envelope vmw:buildId="build-260188" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <References> + <File ovf:href="AyertiennaSUSE.x86_64-0.0.2-disk1.vmdk" ovf:id="file1" ovf:size="761627136"/> + </References> + <DiskSection> + <Info>Virtual disk information</Info> + <Disk ovf:capacity="16514" ovf:capacityAllocationUnits="byte * 2^20" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="2042953728"/> + </DiskSection> + <NetworkSection> + <Info>The list of logical networks</Info> + <Network ovf:name="bridged"> + <Description>The bridged network</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="vm"> + <Info>A virtual machine</Info> + <Name>AyertiennaSUSE.x86_64-0.0.2</Name> + <OperatingSystemSection ovf:id="83" vmw:osType="suse64Guest"> + <Info>The kind of installed guest operating system</Info> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>AyertiennaSUSE.x86_64-0.0.2</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>vmx-04</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Description>Number of Virtual CPUs</rasd:Description> + <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>1</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>512MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>512</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>SCSI Controller</rasd:Description> + <rasd:ElementName>scsiController0</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>lsilogic</rasd:ResourceSubType> + <rasd:ResourceType>6</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>8</rasd:InstanceID> + <rasd:Parent>4</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <Item + </Item> + </VirtualHardwareSection> + </VirtualSystem> +</Envelope> + diff --git a/test/ganeti.ovf_unittest.py b/test/ganeti.ovf_unittest.py new file mode 100644 index 0000000000000000000000000000000000000000..e30ac39560fe31b9e1bc2fc14b38fac1bdff2440 --- /dev/null +++ b/test/ganeti.ovf_unittest.py @@ -0,0 +1,536 @@ +#!/usr/bin/python +# + +# Copyright (C) 2011 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + + +"""Script for testing ganeti.ovf. + +""" + +import optparse +import os +import os.path +import re +import shutil +import sys +import tempfile +import unittest + +from ganeti import constants +from ganeti import errors +from ganeti import ovf +from ganeti import utils + +import testutils + +OUTPUT_DIR = "newdir" + +GANETI_DISKS = { + "disk_count": "1", + "disk0_dump": "new_disk.raw", + "disk0_size": "0", + "disk0_ivname": "disk/0", +} +GANETI_NETWORKS = { + "nic_count": "1", + "nic0_mode": "bridged", + "nic0_ip": "none", + "nic0_mac": "aa:00:00:d8:2c:1e", + "nic0_link": "xen-br0", +} +GANETI_HYPERVISOR = { + "hypervisor_name": "xen-pvm", + "root-path": "/dev/sda", + "kernel_args": "ro", +} +GANETI_OS = {"os_name": "lenny-image"} +GANETI_BACKEND = { + "vcpus": "1", + "memory" : "2048", + "auto_balance": "False", +} +GANETI_NAME = "ganeti-test-xen" +GANETI_TEMPLATE = "plain" +GANETI_TAGS = None +GANETI_VERSION = "0" + +VIRTUALBOX_DISKS = { + "disk_count": "2", + "disk0_ivname": "disk/0", + "disk0_dump": "new_disk.raw", + "disk0_size": "0", + "disk1_ivname": "disk/1", + "disk1_dump": "second_disk.raw", + "disk1_size": "0", +} +VIRTUALBOX_NETWORKS = { + "nic_count": "1", + "nic0_mode": "bridged", + "nic0_ip": "none", + "nic0_link": "auto", + "nic0_mac": "auto", +} +VIRTUALBOX_HYPERVISOR = {"hypervisor_name": "auto"} +VIRTUALBOX_OS = {"os_name": None} +VIRTUALBOX_BACKEND = { + "vcpus": "1", + "memory" : "2048", + "auto_balance": "auto", +} +VIRTUALBOX_NAME = None +VIRTUALBOX_TEMPLATE = None +VIRTUALBOX_TAGS = None +VIRTUALBOX_VERSION = None + +EMPTY_DISKS = {} +EMPTY_NETWORKS = {} +EMPTY_HYPERVISOR = {"hypervisor_name": "auto"} +EMPTY_OS = {} +EMPTY_BACKEND = { + "vcpus": "auto", + "memory" : "auto", + "auto_balance": "auto", +} +EMPTY_NAME = None +EMPTY_TEMPLATE = None +EMPTY_TAGS = None +EMPTY_VERSION = None + +CMDARGS_DISKS = { + "disk_count": "1", + "disk0_ivname": "disk/0", + "disk0_dump": "disk0.raw", + "disk0_size": "8", +} +CMDARGS_NETWORKS = { + "nic0_link": "auto", + "nic0_mode": "bridged", + "nic0_ip": "none", + "nic0_mac": "auto", + "nic_count": "1", +} +CMDARGS_HYPERVISOR = { + "hypervisor_name": "xen-pvm" +} +CMDARGS_OS = {"os_name": "lenny-image"} +CMDARGS_BACKEND = { + "auto_balance": False, + "vcpus": "1", + "memory": "256", +} +CMDARGS_NAME = "test-instance" +CMDARGS_TEMPLATE = "plain" +CMDARGS_TAGS = "test-tag-1,test-tag-2" + +ARGS_EMPTY = { + "output_dir": None, + "nics": [], + "disks": [], + "name": "test-instance", +} +ARGS_EXPORT_DIR = dict(ARGS_EMPTY, **{ + "output_dir": OUTPUT_DIR, + "name": None, + "hypervisor": None, + "os": None, + "beparams": {}, + "no_nics": False, + "disk_template": None, + "tags": None, +}) +ARGS_VBOX = dict(ARGS_EXPORT_DIR, **{ + "output_dir": OUTPUT_DIR, + "name": "test-instance", + "os": "lenny-image", + "hypervisor": ("xen-pvm", {}), + "osparams":{}, + "disks": [], +}) +ARGS_COMPLETE = dict(ARGS_VBOX, **{ + "beparams": {"vcpus":"1", "memory":"256", "auto_balance": False}, + "disks": [(0,{"size":"5mb"})], + "nics": [("0",{"mode":"bridged"})], + "disk_template": "plain", + "tags": "test-tag-1,test-tag-2", +}) +ARGS_BROKEN = dict(ARGS_EXPORT_DIR , **{ + "no_nics": True, + "disk_template": "diskless", + "name": "test-instance", + "os": "lenny-image", + "osparams": {}, +}) + + +def _GetArgs(args, with_name=False): + options = optparse.Values() + needed = args + if with_name: + needed["name"] = "test-instance" + options._update_loose(needed) + return options + + +OPTS_EMPTY = _GetArgs(ARGS_EMPTY) +OPTS_EXPORT_NO_NAME = _GetArgs(ARGS_EXPORT_DIR) +OPTS_EXPORT = _GetArgs(ARGS_EXPORT_DIR, with_name=True) +OPTS_VBOX = _GetArgs(ARGS_VBOX) +OPTS_COMPLETE = _GetArgs(ARGS_COMPLETE) +OPTS_NONIC_NODISK = _GetArgs(ARGS_BROKEN) + + +def _GetFullFilename(file_name): + file_path = "%s/test/data/ovfdata/%s" % (testutils.GetSourceDir(), + file_name) + file_path = os.path.abspath(file_path) + return file_path + + +class BetterUnitTest(unittest.TestCase): + def assertRaisesRegexp(self, exception, regexp_val, function, *args): + try: + function(*args) + self.fail("Expected raising %s" % exception) + except exception, err: + regexp = re.compile(regexp_val) + if re.search(regexp, str(err)) == None: + self.fail("Expected matching '%s', got '%s'" % + (regexp_val, str(err))) + + +class TestOVFImporter(BetterUnitTest): + def setUp(self): + self.non_existing_file = _GetFullFilename("not_the_file.ovf") + self.ganeti_ovf = _GetFullFilename("ganeti.ovf") + self.virtualbox_ovf = _GetFullFilename("virtualbox.ovf") + self.ova_package = _GetFullFilename("ova.ova") + self.empty_ovf = _GetFullFilename("empty.ovf") + self.wrong_extension = _GetFullFilename("wrong_extension.ovd") + self.wrong_ova_archive = _GetFullFilename("wrong_ova.ova") + self.no_ovf_in_ova = _GetFullFilename("no_ovf.ova") + self.importer = None + + def tearDown(self): + if self.importer: + self.importer.Cleanup() + del_dir = os.path.abspath(OUTPUT_DIR) + try: + shutil.rmtree(del_dir) + except OSError: + pass + + def testFileDoesNotExistError(self): + self.assertRaisesRegexp(errors.OpPrereqError, "does not exist", + ovf.OVFImporter, self.non_existing_file, None) + + def testWrongInputFileExtensionError(self): + self.assertRaisesRegexp(errors.OpPrereqError, + "Unknown file extension", ovf.OVFImporter, + self.wrong_extension, None) + + 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.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.temp_dir , None) + + def testOVFSetOutputDirDirectories(self): + self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT) + self.assertEquals(self.importer.input_dir , _GetFullFilename("")) + self.assertTrue(OUTPUT_DIR in self.importer.output_dir) + self.assertEquals(self.importer.temp_dir , None) + + def testWrongOVAArchiveError(self): + self.assertRaisesRegexp(errors.OpPrereqError, "not a proper tar", + ovf.OVFImporter, self.wrong_ova_archive, None) + + def testNoOVFFileInOVAPackageError(self): + self.assertRaisesRegexp(errors.OpPrereqError, "No .ovf file", + ovf.OVFImporter, self.no_ovf_in_ova, None) + + def testParseGanetiOvf(self): + self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT_NO_NAME) + self.importer.Parse() + self.assertTrue("%s/ganeti-test-xen" % OUTPUT_DIR in + self.importer.output_dir) + self.assertEqual(self.importer.results_disk, GANETI_DISKS) + self.assertEqual(self.importer.results_network, GANETI_NETWORKS) + self.assertEqual(self.importer.results_hypervisor, GANETI_HYPERVISOR) + self.assertEqual(self.importer.results_os, GANETI_OS) + self.assertEqual(self.importer.results_backend, GANETI_BACKEND) + self.assertEqual(self.importer.results_name, GANETI_NAME) + self.assertEqual(self.importer.results_template, GANETI_TEMPLATE) + self.assertEqual(self.importer.results_tags, GANETI_TAGS) + self.assertEqual(self.importer.results_version, GANETI_VERSION) + + def testParseVirtualboxOvf(self): + self.importer = ovf.OVFImporter(self.virtualbox_ovf, OPTS_VBOX) + self.importer.Parse() + self.assertTrue("%s/test-instance" % OUTPUT_DIR in self.importer.output_dir) + self.assertEquals(self.importer.results_disk, VIRTUALBOX_DISKS) + self.assertEquals(self.importer.results_network, VIRTUALBOX_NETWORKS) + self.assertEquals(self.importer.results_hypervisor, CMDARGS_HYPERVISOR) + self.assertEquals(self.importer.results_os, CMDARGS_OS) + self.assertEquals(self.importer.results_backend, VIRTUALBOX_BACKEND) + self.assertEquals(self.importer.results_name, CMDARGS_NAME) + self.assertEquals(self.importer.results_template, VIRTUALBOX_TEMPLATE) + self.assertEqual(self.importer.results_tags, VIRTUALBOX_TAGS) + self.assertEqual(self.importer.results_version, constants.EXPORT_VERSION) + + def testParseEmptyOvf(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + self.importer.Parse() + self.assertTrue("%s/test-instance" % OUTPUT_DIR in self.importer.output_dir) + self.assertEquals(self.importer.results_disk, CMDARGS_DISKS) + self.assertEquals(self.importer.results_network, CMDARGS_NETWORKS) + self.assertEquals(self.importer.results_hypervisor, CMDARGS_HYPERVISOR) + self.assertEquals(self.importer.results_os, CMDARGS_OS) + self.assertEquals(self.importer.results_backend, CMDARGS_BACKEND) + self.assertEquals(self.importer.results_name, CMDARGS_NAME) + self.assertEquals(self.importer.results_template, CMDARGS_TEMPLATE) + self.assertEqual(self.importer.results_tags, CMDARGS_TAGS) + self.assertEqual(self.importer.results_version, constants.EXPORT_VERSION) + + def testParseNameOptions(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseNameOptions() + self.assertEquals(results, CMDARGS_NAME) + + def testParseHypervisorOptions(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseHypervisorOptions() + self.assertEquals(results, CMDARGS_HYPERVISOR) + + def testParseOSOptions(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseOSOptions() + self.assertEquals(results, CMDARGS_OS) + + def testParseBackendOptions(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseBackendOptions() + self.assertEquals(results, CMDARGS_BACKEND) + + def testParseTags(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseTags() + self.assertEquals(results, CMDARGS_TAGS) + + def testParseNicOptions(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseNicOptions() + self.assertEquals(results, CMDARGS_NETWORKS) + + def testParseDiskOptionsFromGanetiOVF(self): + self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT) + os.mkdir(OUTPUT_DIR) + results = self.importer._GetDiskInfo() + self.assertEquals(results, GANETI_DISKS) + + def testParseTemplateOptions(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + results = self.importer._ParseTemplateOptions() + self.assertEquals(results, GANETI_TEMPLATE) + + def testParseDiskOptionsFromCmdLine(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) + os.mkdir(OUTPUT_DIR) + results = self.importer._ParseDiskOptions() + self.assertEquals(results, CMDARGS_DISKS) + + def testGetDiskFormat(self): + self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT) + disks_list = self.importer.ovf_reader.GetDisksNames() + results = [self.importer._GetDiskQemuInfo("%s/%s" % + (self.importer.input_dir, path), "file format: (\S+)") + for (path, _) in disks_list] + self.assertEqual(results, ["vmdk"]) + + def testNoInstanceNameOVF(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_EXPORT_NO_NAME) + self.assertRaisesRegexp(errors.OpPrereqError, "Name of instance", + self.importer.Parse) + + def testErrorNoOSNameOVF(self): + self.importer = ovf.OVFImporter(self.virtualbox_ovf, OPTS_EXPORT) + self.assertRaisesRegexp(errors.OpPrereqError, "OS name", + self.importer.Parse) + + def testErrorNoDiskAndNoNetwork(self): + self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_NONIC_NODISK) + self.assertRaisesRegexp(errors.OpPrereqError, + "Either disk specification or network" + " description", self.importer.Parse) + + +class TestOVFReader(BetterUnitTest): + def setUp(self): + self.wrong_xml_file = _GetFullFilename("wrong_xml.ovf") + self.ganeti_ovf = _GetFullFilename("ganeti.ovf") + self.virtualbox_ovf = _GetFullFilename("virtualbox.ovf") + self.corrupted_ovf = _GetFullFilename("corrupted_resources.ovf") + self.wrong_manifest_ovf = _GetFullFilename("wrong_manifest.ovf") + self.no_disk_in_ref_ovf = _GetFullFilename("no_disk_in_ref.ovf") + self.empty_ovf = _GetFullFilename("empty.ovf") + self.compressed_disk = _GetFullFilename("gzip_disk.ovf") + + def tearDown(self): + pass + + def testXMLParsingError(self): + self.assertRaisesRegexp(errors.OpPrereqError, + "Error while reading .ovf", ovf.OVFReader, self.wrong_xml_file) + + def testFileInResourcesDoesNotExistError(self): + self.assertRaisesRegexp(errors.OpPrereqError, "does not exist", + ovf.OVFReader, self.corrupted_ovf) + + def testWrongManifestChecksumError(self): + reader = ovf.OVFReader(self.wrong_manifest_ovf) + self.assertRaisesRegexp(errors.OpPrereqError, + "does not match the value in manifest file", reader.VerifyManifest) + + def testGoodManifestChecksum(self): + reader = ovf.OVFReader(self.ganeti_ovf) + self.assertEqual(reader.VerifyManifest(), None) + + def testGetDisksNamesOVFCorruptedError(self): + reader = ovf.OVFReader(self.no_disk_in_ref_ovf) + self.assertRaisesRegexp(errors.OpPrereqError, + "not found in references", reader.GetDisksNames) + + def testGetDisksNamesVirtualbox(self): + reader = ovf.OVFReader(self.virtualbox_ovf) + disk_names = reader.GetDisksNames() + expected_names = [ + ("new_disk.vmdk", None) , + ("second_disk.vmdk", None), + ] + self.assertEqual(sorted(disk_names), sorted(expected_names)) + + def testGetDisksNamesEmpty(self): + reader = ovf.OVFReader(self.empty_ovf) + disk_names = reader.GetDisksNames() + self.assertEqual(disk_names, []) + + def testGetDisksNamesCompressed(self): + reader = ovf.OVFReader(self.compressed_disk) + disk_names = reader.GetDisksNames() + self.assertEqual(disk_names, [("compr_disk.vmdk.gz", "gzip")]) + + def testGetNetworkDataGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + networks = reader.GetNetworkData() + self.assertEqual(networks, GANETI_NETWORKS) + + def testGetNetworkDataVirtualbox(self): + reader = ovf.OVFReader(self.virtualbox_ovf) + networks = reader.GetNetworkData() + self.assertEqual(networks, VIRTUALBOX_NETWORKS) + + def testGetNetworkDataEmpty(self): + reader = ovf.OVFReader(self.empty_ovf) + networks = reader.GetNetworkData() + self.assertEqual(networks, EMPTY_NETWORKS) + + def testGetHypervisorDataGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + hypervisor = reader.GetHypervisorData() + self.assertEqual(hypervisor, GANETI_HYPERVISOR) + + def testGetHypervisorDataEmptyOvf(self): + reader = ovf.OVFReader(self.empty_ovf) + hypervisor = reader.GetHypervisorData() + self.assertEqual(hypervisor, EMPTY_HYPERVISOR) + + def testGetOSDataGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + osys = reader.GetOSData() + self.assertEqual(osys, GANETI_OS) + + def testGetOSDataEmptyOvf(self): + reader = ovf.OVFReader(self.empty_ovf) + osys = reader.GetOSData() + self.assertEqual(osys, EMPTY_OS) + + def testGetBackendDataGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + backend = reader.GetBackendData() + self.assertEqual(backend, GANETI_BACKEND) + + def testGetBackendDataVirtualbox(self): + reader = ovf.OVFReader(self.virtualbox_ovf) + backend = reader.GetBackendData() + self.assertEqual(backend, VIRTUALBOX_BACKEND) + + def testGetBackendDataEmptyOvf(self): + reader = ovf.OVFReader(self.empty_ovf) + backend = reader.GetBackendData() + self.assertEqual(backend, EMPTY_BACKEND) + + def testGetInstanceNameGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + name = reader.GetInstanceName() + self.assertEqual(name, GANETI_NAME) + + def testGetInstanceNameDataEmptyOvf(self): + reader = ovf.OVFReader(self.empty_ovf) + name = reader.GetInstanceName() + self.assertEqual(name, EMPTY_NAME) + + def testGetDiskTemplateGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + name = reader.GetDiskTemplate() + self.assertEqual(name, GANETI_TEMPLATE) + + def testGetDiskTemplateEmpty(self): + reader = ovf.OVFReader(self.empty_ovf) + name = reader.GetDiskTemplate() + self.assertEqual(name, EMPTY_TEMPLATE) + + def testGetTagsGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + tags = reader.GetTagsData() + self.assertEqual(tags, GANETI_TAGS) + + def testGetTagsEmpty(self): + reader = ovf.OVFReader(self.empty_ovf) + tags = reader.GetTagsData() + self.assertEqual(tags, EMPTY_TAGS) + + def testGetVersionGaneti(self): + reader = ovf.OVFReader(self.ganeti_ovf) + version = reader.GetVersionData() + self.assertEqual(version, GANETI_VERSION) + + def testGetVersionEmpty(self): + reader = ovf.OVFReader(self.empty_ovf) + version = reader.GetVersionData() + self.assertEqual(version, EMPTY_VERSION) + + +if __name__ == "__main__": + testutils.GanetiTestProgram()