From 2f7c1fdb85bef1c3f9d8f0570349e84edf15e894 Mon Sep 17 00:00:00 2001 From: Artom Lifshitz Date: Sat, 26 Jan 2019 12:12:27 -0500 Subject: [PATCH] Copy default image before setting props In order to avoid setting image properties on the default image, copy it first. Change-Id: I36eb2ea0c849285bf51c7abf28abcedeea211982 --- whitebox_tempest_plugin/api/compute/base.py | 28 +++++++++++++++++++ .../api/compute/test_pointer_device_type.py | 12 +------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/whitebox_tempest_plugin/api/compute/base.py b/whitebox_tempest_plugin/api/compute/base.py index e3de1a62..95a084be 100644 --- a/whitebox_tempest_plugin/api/compute/base.py +++ b/whitebox_tempest_plugin/api/compute/base.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +import six import xml.etree.ElementTree as ET from oslo_log import log as logging @@ -36,6 +37,7 @@ class BaseWhiteboxComputeTest(base.BaseV2ComputeAdminTest): cls.servers_client = cls.os_admin.servers_client cls.flavors_client = cls.os_admin.flavors_client cls.hypervisor_client = cls.os_admin.hypervisor_client + cls.image_client = cls.os_admin.image_client_v2 def create_test_server(self, *args, **kwargs): # override the function to return the admin view of the created server @@ -67,6 +69,32 @@ class BaseWhiteboxComputeTest(base.BaseV2ComputeAdminTest): return self.servers_client.show_server(server_id)['server'] + def copy_default_image(self, **kwargs): + """Creates a new image by downloading the default image's bits and + uploading them to a new image. Any kwargs are set as image properties + on the new image. + + :return image_id: The UUID of the newly created image. + """ + image = self.image_client.show_image(CONF.compute.image_ref) + image_data = self.image_client.show_image_file( + CONF.compute.image_ref).data + image_file = six.BytesIO(image_data) + + create_dict = { + 'container_format': image['container_format'], + 'disk_format': image['disk_format'], + 'min_disk': image['min_disk'], + 'min_ram': image['min_ram'], + 'visibility': 'public', + } + create_dict.update(kwargs) + new_image = self.image_client.create_image(**create_dict) + self.addCleanup(self.image_client.delete_image, new_image['id']) + self.image_client.store_image_file(new_image['id'], image_file) + + return new_image['id'] + def get_hypervisor_ip(self, server_id): server = self.servers_client.show_server(server_id) host = server['server']['OS-EXT-SRV-ATTR:host'] diff --git a/whitebox_tempest_plugin/api/compute/test_pointer_device_type.py b/whitebox_tempest_plugin/api/compute/test_pointer_device_type.py index b3c8ed9d..8241ef9a 100644 --- a/whitebox_tempest_plugin/api/compute/test_pointer_device_type.py +++ b/whitebox_tempest_plugin/api/compute/test_pointer_device_type.py @@ -32,13 +32,6 @@ class PointerDeviceTypeFromImages(base.BaseWhiteboxComputeTest): super(PointerDeviceTypeFromImages, cls).setup_clients() cls.compute_images_client = cls.os_admin.compute_images_client - def _set_image_metadata_item(self, image): - req_metadata = {'hw_pointer_model': 'usbtablet'} - self.compute_images_client.set_image_metadata(image, req_metadata) - resp_metadata = (self.compute_images_client.list_image_metadata(image) - ['metadata']) - self.assertEqual(req_metadata, resp_metadata) - def _verify_pointer_device_type_from_images(self, server_id): domain = self.get_server_xml(server_id).text tablet = domain.find('./input[@type="tablet"][@bus="usb"]') @@ -47,10 +40,7 @@ class PointerDeviceTypeFromImages(base.BaseWhiteboxComputeTest): self.assertTrue(mouse) def test_pointer_device_type_from_images(self): - # TODO(stephenfin): I'm pretty sure this modifying the main image. We - # shouldn't be doing that. - image_id = CONF.compute.image_ref - self._set_image_metadata_item(image_id) + image_id = self.copy_default_image(hw_pointer_model='usbtablet') server = self.create_test_server(image_id=image_id, wait_until='ACTIVE')