From a9fe849b333058b74e532aa3431cdc40194d0b9e Mon Sep 17 00:00:00 2001 From: Daryl Walleck Date: Tue, 28 Jan 2014 10:51:13 -0600 Subject: [PATCH] Modified server response model to allow for null images * Changed serialization to check if image field is null or empty before attempting serialization * Added unit tests to verify serialization does not fail for the server response object if the image field is the empty string Change-Id: Ifc9df4d5288e64a173ad2c5c882469ae75dcad5b --- .../compute/servers_api/models/servers.py | 4 +- .../compute/servers/models/test_servers.py | 133 ++++++++++++++++++ 2 files changed, 135 insertions(+), 2 deletions(-) diff --git a/cloudcafe/compute/servers_api/models/servers.py b/cloudcafe/compute/servers_api/models/servers.py index 41649178..a08a210b 100644 --- a/cloudcafe/compute/servers_api/models/servers.py +++ b/cloudcafe/compute/servers_api/models/servers.py @@ -122,7 +122,7 @@ class Server(AutoMarshallingModel): addresses = Addresses._xml_ele_to_obj(element.find('addresses')) if element.find('flavor') is not None: flavor = Flavor._xml_ele_to_obj(element.find('flavor')) - if element.find('image') is not None: + if element.find('image'): image = Image._xml_ele_to_obj(element.find('image')) if element.find('metadata') is not None: metadata = Metadata._xml_ele_to_obj(element.find('metadata')) @@ -168,7 +168,7 @@ class Server(AutoMarshallingModel): addresses = Addresses._dict_to_obj(server_dict['addresses']) if 'flavor' in server_dict: flavor = FlavorMin._dict_to_obj(server_dict['flavor']) - if 'image' in server_dict: + if 'image' in server_dict and server_dict.get('image'): image = ImageMin._dict_to_obj(server_dict['image']) if 'metadata' in server_dict: metadata = Metadata._dict_to_obj(server_dict['metadata']) diff --git a/metatests/cloudcafe/compute/servers/models/test_servers.py b/metatests/cloudcafe/compute/servers/models/test_servers.py index 14188d09..0203ad59 100644 --- a/metatests/cloudcafe/compute/servers/models/test_servers.py +++ b/metatests/cloudcafe/compute/servers/models/test_servers.py @@ -111,6 +111,12 @@ class ServerDomainTest(object): self.assertEqual(self.server.host, 'host123') +class ServerFromVolumeDomainTest(object): + + def test_server_image(self): + self.assertIsNone(self.server.image) + + class ServerXMLDomainTest(unittest.TestCase, ServerDomainTest): @classmethod @@ -245,3 +251,130 @@ class ServerJSONDomainTest(unittest.TestCase, ServerDomainTest): } """ cls.server = Server.deserialize(cls.server_json, 'json') + + +class ServerFromVolumeXMLDomainTest(unittest.TestCase, + ServerFromVolumeDomainTest): + + @classmethod + def setUpClass(cls): + docs_url = 'http://docs.openstack.org' + ext = 'compute/ext/extended_status' + cls.server_xml = \ + """ + + + + + + + value1 + + + + + + + + + + + + + + """.format(docs_url=docs_url, ext=ext) + cls.server = Server.deserialize(cls.server_xml, 'xml') + + +class ServerFromVolumeJSONDomainTest(unittest.TestCase, + ServerFromVolumeDomainTest): + + @classmethod + def setUpClass(cls): + cls.server_json = \ + """ + { + "server" : { + "status" : "ACTIVE", + "key_name" : "ssh_key", + "updated" : "2012-12-03T19:04:06Z", + "hostId" : "123", + "OS-EXT-SRV-ATTR:host" : "host123", + "addresses" : { + "public" : [ + { + "version" : 4, + "addr" : "198.61.236.10" + }, + { + "version" : 6, + "addr" : "2001:11:7811:69:cf10:c02d:ff10:fa" + } + ], + "private" : [ + { + "version" : 4, + "addr" : "10.176.99.109" + } + ] + }, + "links" : [ + { + "href" : "https://127.0.0.1/v2/660/servers/5", + "rel" : "self" + }, + { + "href" : "https://127.0.0.1/660/servers/5", + "rel" : "bookmark" + } + ], + "image" : "", + "OS-EXT-STS:task_state" : null, + "OS-EXT-STS:vm_state" : "active", + "OS-EXT-SRV-ATTR:instance_name" : "instance-test", + "OS-EXT-SRV-ATTR:hypervisor_hostname" : "hyper-host", + "flavor" : { + "id" : "2", + "links" : [ + { + "href" : "https://127.0.0.1/660/flavors/2", + "rel" : "bookmark" + } + ] + }, + "id" : "5", + "user_id" : "199835", + "name" : "testserver47476", + "created" : "2012-12-03T18:59:16Z", + "tenant_id" : "660", + "OS-DCF:diskConfig" : "AUTO", + "accessIPv4" : "192.168.1.10", + "accessIPv6" : "2001:11:7811:69:cf10:c02d:ff10:fa", + "progress" : 100, + "OS-EXT-STS:power_state" : 1, + "metadata" : { + "meta1": "value1" + } + } + } + """ + cls.server = Server.deserialize(cls.server_json, 'json')