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'))
|
||||
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'])
|
||||
|
||||
@@ -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 = \
|
||||
"""
|
||||
<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