def test_get_disk_format(self): """Get format and subformat of various disk images.""" # First, tests that just use qemu-img try: temp_disk = os.path.join(self.temp_dir, 'foo.img') create_disk_image(temp_disk, capacity="16M") (f, sf) = get_disk_format(temp_disk) self.assertEqual(f, 'raw') self.assertEqual(sf, None) temp_disk = os.path.join(self.temp_dir, 'foo.qcow2') create_disk_image(temp_disk, capacity="1G") (f, sf) = get_disk_format(temp_disk) self.assertEqual(f, 'qcow2') self.assertEqual(sf, None) except HelperNotFoundError as e: self.fail(e.strerror) # Now a test that uses both qemu-img and file inspection try: (f, sf) = get_disk_format(self.blank_vmdk) self.assertEqual(f, 'vmdk') self.assertEqual(sf, 'streamOptimized') except HelperNotFoundError as e: self.fail(e.strerror)
def test_create_raw_with_contents(self): """Creation of raw disk image containing files.""" disk_path = os.path.join(self.temp_dir, "out.img") try: create_disk_image(disk_path, contents=[self.input_ovf]) except HelperNotFoundError as e: self.fail(e.strerror) (f, sf) = get_disk_format(disk_path) self.assertEqual(f, 'raw') try: capacity = get_disk_capacity(disk_path) self.assertEqual(capacity, "8388608") except HelperNotFoundError as e: self.fail(e.strerror) # TODO check raw file contents # Again, but now force the disk size try: create_disk_image(disk_path, contents=[self.input_ovf], capacity="64M") except HelperNotFoundError as e: self.fail(e.strerror) (f, sf) = get_disk_format(disk_path) self.assertEqual(f, 'raw') try: capacity = get_disk_capacity(disk_path) self.assertEqual(capacity, "67108864") except HelperNotFoundError as e: self.fail(e.strerror)
def test_convert_to_vmdk_streamoptimized(self): """Convert a disk to vmdk streamOptimized sub-format.""" # Raw to stream-optimized vmdk temp_disk = os.path.join(self.temp_dir, "foo.img") try: create_disk_image(temp_disk, capacity="16M") except HelperNotFoundError as e: self.fail(e.strerror) try: new_disk_path = convert_disk_image(temp_disk, self.temp_dir, 'vmdk', 'streamOptimized') except HelperNotFoundError as e: self.fail(e.strerror) (f, sf) = get_disk_format(new_disk_path) self.assertEqual(f, 'vmdk') self.assertEqual(sf, 'streamOptimized') # Non-stream-optimized to stream-optimized temp_disk = os.path.join(self.temp_dir, "foo.vmdk") create_disk_image(temp_disk, capacity="16M") new_disk_path = convert_disk_image(temp_disk, self.temp_dir, 'vmdk', 'streamOptimized') (f, sf) = get_disk_format(new_disk_path) self.assertEqual(f, 'vmdk') self.assertEqual(sf, 'streamOptimized')
def test_convert_to_vmdk_streamoptimized_new_qemu(self): """Code flow for new QEMU version.""" COT.helpers.api.QEMUIMG._version = StrictVersion("2.1.0") try: temp_disk = os.path.join(self.temp_dir, "foo.qcow2") create_disk_image(temp_disk, capacity="16M") new_disk_path = convert_disk_image(temp_disk, self.temp_dir, 'vmdk', 'streamOptimized') self.assertEqual(new_disk_path, os.path.join(self.temp_dir, 'foo.vmdk')) (f, sf) = get_disk_format(new_disk_path) self.assertEqual(f, 'vmdk') self.assertEqual(sf, 'streamOptimized') except HelperNotFoundError as e: self.fail(e.strerror) finally: COT.helpers.api.QEMUIMG._version = None
def test_disk_conversion(self): """Make sure hard disk is converted to stream-optimized VMDK format.""" # Create a qcow2 image and add it as a new disk new_qcow2 = os.path.join(self.temp_dir, "new.qcow2") # Make it a small file to keep the test fast create_disk_image(new_qcow2, capacity="16M") self.instance.package = self.input_ovf self.instance.disk_image = new_qcow2 self.instance.controller = 'scsi' self.instance.run() self.assertLogged(**self.TYPE_NOT_SPECIFIED_GUESS_HARDDISK) self.instance.finished() # Make sure the disk was converted and added to the OVF self.check_diff(""" <ovf:File ovf:href="input.iso" ovf:id="file2" ovf:size="{iso_size}" /> + <ovf:File ovf:href="new.vmdk" ovf:id="new.vmdk" ovf:size="{new_size}" /> </ovf:References> ... <ovf:Disk ovf:capacity="1" ovf:capacityAllocationUnits="byte * 2^30" \ ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format=\ "http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" /> + <ovf:Disk ovf:capacity="16" ovf:capacityAllocationUnits="byte * 2^20" \ ovf:diskId="new.vmdk" ovf:fileRef="new.vmdk" ovf:format=\ "http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" /> </ovf:DiskSection> ... </ovf:Item> + <ovf:Item> + <rasd:AddressOnParent>1</rasd:AddressOnParent> + <rasd:ElementName>Hard Disk Drive</rasd:ElementName> + <rasd:HostResource>ovf:/disk/new.vmdk</rasd:HostResource> + <rasd:InstanceID>14</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </ovf:Item> </ovf:VirtualHardwareSection> """.format(iso_size=self.FILE_SIZE['input.iso'], new_size=os.path.getsize(os.path.join(self.temp_dir, "new.vmdk")))) # Make sure the disk was actually converted to the right format format, subformat = get_disk_format(os.path.join(self.temp_dir, "new.vmdk")) self.assertEqual(format, 'vmdk') self.assertEqual(subformat, "streamOptimized")