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
This commit is contained in:
@@ -122,7 +122,7 @@ class Server(AutoMarshallingModel):
|
|||||||
addresses = Addresses._xml_ele_to_obj(element.find('addresses'))
|
addresses = Addresses._xml_ele_to_obj(element.find('addresses'))
|
||||||
if element.find('flavor') is not None:
|
if element.find('flavor') is not None:
|
||||||
flavor = Flavor._xml_ele_to_obj(element.find('flavor'))
|
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'))
|
image = Image._xml_ele_to_obj(element.find('image'))
|
||||||
if element.find('metadata') is not None:
|
if element.find('metadata') is not None:
|
||||||
metadata = Metadata._xml_ele_to_obj(element.find('metadata'))
|
metadata = Metadata._xml_ele_to_obj(element.find('metadata'))
|
||||||
@@ -168,7 +168,7 @@ class Server(AutoMarshallingModel):
|
|||||||
addresses = Addresses._dict_to_obj(server_dict['addresses'])
|
addresses = Addresses._dict_to_obj(server_dict['addresses'])
|
||||||
if 'flavor' in server_dict:
|
if 'flavor' in server_dict:
|
||||||
flavor = FlavorMin._dict_to_obj(server_dict['flavor'])
|
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'])
|
image = ImageMin._dict_to_obj(server_dict['image'])
|
||||||
if 'metadata' in server_dict:
|
if 'metadata' in server_dict:
|
||||||
metadata = Metadata._dict_to_obj(server_dict['metadata'])
|
metadata = Metadata._dict_to_obj(server_dict['metadata'])
|
||||||
|
|||||||
@@ -111,6 +111,12 @@ class ServerDomainTest(object):
|
|||||||
self.assertEqual(self.server.host, 'host123')
|
self.assertEqual(self.server.host, 'host123')
|
||||||
|
|
||||||
|
|
||||||
|
class ServerFromVolumeDomainTest(object):
|
||||||
|
|
||||||
|
def test_server_image(self):
|
||||||
|
self.assertIsNone(self.server.image)
|
||||||
|
|
||||||
|
|
||||||
class ServerXMLDomainTest(unittest.TestCase, ServerDomainTest):
|
class ServerXMLDomainTest(unittest.TestCase, ServerDomainTest):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -245,3 +251,130 @@ class ServerJSONDomainTest(unittest.TestCase, ServerDomainTest):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
cls.server = Server.deserialize(cls.server_json, 'json')
|
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 = \
|
||||||
|
"""
|
||||||
|
<server
|
||||||
|
xmlns:OS-DCF="{docs_url}/compute/ext/disk_config/api/v1.1"
|
||||||
|
xmlns:OS-EXT-STS="{docs_url}/{ext}/api/v1.1"
|
||||||
|
xmlns:OS-EXT-SRV-ATTR="{docs_url}/{ext}/api/v1.1"
|
||||||
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||||
|
xmlns="{docs_url}/compute/api/v1.1"
|
||||||
|
status="ACTIVE" updated="2012-12-03T19:04:06Z"
|
||||||
|
hostId="123"
|
||||||
|
tenant_id="660"
|
||||||
|
name="testserver47476" created="2012-12-03T18:59:16Z"
|
||||||
|
userId="199835" tenantId="660" accessIPv4="192.168.1.10"
|
||||||
|
accessIPv6="2001:11:7811:69:cf10:c02d:ff10:fa"
|
||||||
|
progress="100" id="5" OS-EXT-STS:vm_state="active"
|
||||||
|
key_name="ssh_key"
|
||||||
|
OS-EXT-STS:task_state="None" OS-EXT-STS:power_state="1"
|
||||||
|
OS-DCF:diskConfig="AUTO"
|
||||||
|
OS-EXT-SRV-ATTR:instance_name="instance-test"
|
||||||
|
OS-EXT-SRV-ATTR:host="host123"
|
||||||
|
OS-EXT-SRV-ATTR:hypervisor_hostname="hyper-host">
|
||||||
|
<image/>
|
||||||
|
<flavor id="2">
|
||||||
|
<atom:link href="https://127.0.0.1/660/flavors/2"
|
||||||
|
rel="bookmark"/>
|
||||||
|
</flavor>
|
||||||
|
<metadata>
|
||||||
|
<meta key="meta1">value1</meta>
|
||||||
|
</metadata>
|
||||||
|
<addresses>
|
||||||
|
<network id="public">
|
||||||
|
<ip version="4" addr="198.61.236.10"/>
|
||||||
|
<ip version="6" addr="2001:11:7811:69:cf10:c02d:ff10:fa"/>
|
||||||
|
</network>
|
||||||
|
<network id="private">
|
||||||
|
<ip version="4" addr="10.176.99.109"/>
|
||||||
|
</network>
|
||||||
|
</addresses>
|
||||||
|
<atom:link href="https://127.0.0.1/v2/660/servers/5" rel="self"/>
|
||||||
|
<atom:link href="https://127.0.0.1/660/servers/5" rel="bookmark"/>
|
||||||
|
</server>
|
||||||
|
""".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')
|
||||||
|
|||||||
Reference in New Issue
Block a user