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