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:
Daryl Walleck
2014-01-28 10:51:13 -06:00
parent 2d1e44ebca
commit a9fe849b33
2 changed files with 135 additions and 2 deletions

View File

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

View File

@@ -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')