+ def test_create_three_part_image_from_url_3_creators(self):
+ """
+ Tests the creation of a 3-part OpenStack image from a URL.
+ """
+ if 'disk_file' not in self.glance_test_meta:
+ # Set properties
+ properties = {}
+ if self.glance_test_meta and 'extra_properties' in self.glance_test_meta:
+ properties = self.glance_test_meta['extra_properties']
+
+ # Create the kernel image
+ kernel_image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name+'_kernel',
+ url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-kernel')
+
+ if self.glance_test_meta:
+ if 'kernel_url' in self.glance_test_meta:
+ kernel_image_settings.url = self.glance_test_meta['kernel_url']
+ self.image_creators.append(create_image.OpenStackImage(self.os_creds, kernel_image_settings))
+ kernel_image = self.image_creators[-1].create()
+ self.assertIsNotNone(kernel_image)
+ self.assertEqual(get_image_size(kernel_image_settings), kernel_image.size)
+
+ # Create the ramdisk image
+ ramdisk_image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name+'_ramdisk',
+ url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-initramfs')
+ if self.glance_test_meta:
+ if 'ramdisk_url' in self.glance_test_meta:
+ ramdisk_image_settings.url = self.glance_test_meta['ramdisk_url']
+ self.image_creators.append(create_image.OpenStackImage(self.os_creds, ramdisk_image_settings))
+ ramdisk_image = self.image_creators[-1].create()
+ self.assertIsNotNone(ramdisk_image)
+ self.assertEqual(get_image_size(ramdisk_image_settings), ramdisk_image.size)
+
+ # Create the main image
+ os_image_settings = openstack_tests.cirros_image_settings(
+ name=self.image_name,
+ url='http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img')
+ if self.glance_test_meta:
+ if 'disk_url' in self.glance_test_meta:
+ os_image_settings.url = self.glance_test_meta['disk_url']
+
+ properties['kernel_id'] = kernel_image.id
+ properties['ramdisk_id'] = ramdisk_image.id
+ os_image_settings.extra_properties = properties
+
+ self.image_creators.append(create_image.OpenStackImage(self.os_creds, os_image_settings))
+ created_image = self.image_creators[-1].create()
+ self.assertIsNotNone(created_image)
+ self.assertEqual(self.image_name, created_image.name)
+
+ retrieved_image = glance_utils.get_image(self.glance, os_image_settings.name)
+ self.assertIsNotNone(retrieved_image)
+
+ self.assertEqual(self.image_creators[-1].get_image().size, retrieved_image.size)
+ self.assertEqual(get_image_size(os_image_settings), retrieved_image.size)
+
+ self.assertEqual(created_image.name, retrieved_image.name)
+ self.assertEqual(created_image.id, retrieved_image.id)
+ self.assertEqual(created_image.properties, retrieved_image.properties)
+ else:
+ logger.warn('Test not executed as the image metadata requires image files')
+
+
+def get_image_size(image_settings):
+ """
+ Returns the expected image size
+ :return:
+ """
+ if image_settings.image_file:
+ return os.path.getsize(image_settings.image_file)
+ elif image_settings.url:
+ return int(file_utils.get_content_length(image_settings.url))
+ else:
+ raise Exception('Cannot retrieve expected image size. Image filename or URL has not been configured')