make server and image metadata optional

This commit is contained in:
Mark Washenberger
2011-07-07 10:48:17 -04:00
parent 8caf69dc93
commit b50e92d43f
2 changed files with 128 additions and 37 deletions

View File

@@ -285,9 +285,10 @@ class ImageXMLSerializer(wsgi.DictSerializer):
server_node = self._create_server_node(xml_doc, image['server'])
image_node.appendChild(server_node)
metadata = image.get('metadata', {})
metadata_node = self._create_metadata_node(xml_doc, metadata.items())
image_node.appendChild(metadata_node)
metadata = image.get('metadata', {}).items()
if len(metadata) > 0:
metadata_node = self._create_metadata_node(xml_doc, metadata)
image_node.appendChild(metadata_node)
self._add_atom_links(xml_doc, image_node, image['links'])

View File

@@ -1197,11 +1197,11 @@ class ImageXMLSerializationTest(test.TestCase):
},
'links': [
{
'href': self.IMAGE_HREF % (1,),
'href': self.IMAGE_HREF % 1,
'rel': 'self',
},
{
'href': self.IMAGE_BOOKMARK % (1,),
'href': self.IMAGE_BOOKMARK % 1,
'rel': 'bookmark',
},
],
@@ -1213,8 +1213,8 @@ class ImageXMLSerializationTest(test.TestCase):
expected_server_href = self.SERVER_HREF
expected_server_bookmark = self.SERVER_BOOKMARK
expected_href = self.IMAGE_HREF % (1, )
expected_bookmark = self.IMAGE_BOOKMARK % (1, )
expected_href = self.IMAGE_HREF % 1
expected_bookmark = self.IMAGE_BOOKMARK % 1
expected_now = self.TIMESTAMP
expected = minidom.parseString("""
<image id="1"
@@ -1239,28 +1239,42 @@ class ImageXMLSerializationTest(test.TestCase):
</image>
""".replace(" ", "") % (locals()))
print expected.toxml()
print '---'
print actual.toxml()
self.assertEqual(expected.toxml(), actual.toxml())
def test_show_zero_metadata(self):
serializer = images.ImageXMLSerializer()
self.maxDiff = None
fixture = {
'image': {
'id': 1,
'name': 'Image1',
'created': self.TIMESTAMP,
'updated': self.TIMESTAMP,
'serverRef': self.SERVER_HREF,
'status': 'ACTIVE',
'server': {
'id': 1,
'name': 'Server1',
'links': [
{
'href': self.SERVER_HREF,
'rel': 'self',
},
{
'href': self.SERVER_BOOKMARK,
'rel': 'bookmark',
},
],
},
'metadata': {},
'links': [
{
'href': self.IMAGE_HREF % (1,),
'href': self.IMAGE_HREF % 1,
'rel': 'self',
},
{
'href': self.IMAGE_BOOKMARK % 1,
'rel': 'bookmark',
'type': 'application/json',
},
],
},
@@ -1270,21 +1284,24 @@ class ImageXMLSerializationTest(test.TestCase):
actual = minidom.parseString(output.replace(" ", ""))
expected_server_href = self.SERVER_HREF
expected_href = self.IMAGE_HREF % (1, )
expected_server_bookmark = self.SERVER_BOOKMARK
expected_href = self.IMAGE_HREF % 1
expected_bookmark = self.IMAGE_BOOKMARK % 1
expected_now = self.TIMESTAMP
expected = minidom.parseString("""
<image id="1"
xmlns="http://docs.openstack.org/compute/api/v1.1"
xmlns:atom="http://www.w3.org/2005/Atom"
name="Image1"
serverRef="%(expected_server_href)s"
updated="%(expected_now)s"
created="%(expected_now)s"
status="ACTIVE"
xmlns="http://docs.openstack.org/compute/api/v1.1">
<links>
<link href="%(expected_href)s" rel="bookmark"
type="application/json" />
</links>
<metadata />
status="ACTIVE">
<server name="Server1" id="1">
<atom:link rel="self" href="%(expected_server_href)s"/>
<atom:link rel="bookmark" href="%(expected_server_bookmark)s"/>
</server>
<atom:link href="%(expected_href)s" rel="self"/>
<atom:link href="%(expected_bookmark)s" rel="bookmark"/>
</image>
""".replace(" ", "") % (locals()))
@@ -1293,22 +1310,38 @@ class ImageXMLSerializationTest(test.TestCase):
def test_show_image_no_metadata_key(self):
serializer = images.ImageXMLSerializer()
self.maxDiff = None
fixture = {
'image': {
'id': 1,
'name': 'Image1',
'created': self.TIMESTAMP,
'updated': self.TIMESTAMP,
'serverRef': self.SERVER_HREF,
'status': 'ACTIVE',
'server': {
'id': 1,
'name': 'Server1',
'links': [
{
'href': self.SERVER_HREF,
'rel': 'self',
},
{
'href': self.SERVER_BOOKMARK,
'rel': 'bookmark',
},
],
},
'links': [
{
'href': self.IMAGE_HREF % (1,),
'href': self.IMAGE_HREF % 1,
'rel': 'self',
},
{
'href': self.IMAGE_BOOKMARK % 1,
'rel': 'bookmark',
'type': 'application/json',
},
],
},
}
@@ -1316,21 +1349,78 @@ class ImageXMLSerializationTest(test.TestCase):
actual = minidom.parseString(output.replace(" ", ""))
expected_server_href = self.SERVER_HREF
expected_href = self.IMAGE_HREF % (1, )
expected_server_bookmark = self.SERVER_BOOKMARK
expected_href = self.IMAGE_HREF % 1
expected_bookmark = self.IMAGE_BOOKMARK % 1
expected_now = self.TIMESTAMP
expected = minidom.parseString("""
<image id="1"
xmlns="http://docs.openstack.org/compute/api/v1.1"
xmlns:atom="http://www.w3.org/2005/Atom"
name="Image1"
serverRef="%(expected_server_href)s"
updated="%(expected_now)s"
created="%(expected_now)s"
status="ACTIVE"
xmlns="http://docs.openstack.org/compute/api/v1.1">
<links>
<link href="%(expected_href)s" rel="bookmark"
type="application/json" />
</links>
<metadata />
status="ACTIVE">
<server name="Server1" id="1">
<atom:link rel="self" href="%(expected_server_href)s"/>
<atom:link rel="bookmark" href="%(expected_server_bookmark)s"/>
</server>
<atom:link href="%(expected_href)s" rel="self"/>
<atom:link href="%(expected_bookmark)s" rel="bookmark"/>
</image>
""".replace(" ", "") % (locals()))
self.assertEqual(expected.toxml(), actual.toxml())
def test_show_no_server(self):
serializer = images.ImageXMLSerializer()
#so we can see the full diff in the output
self.maxDiff = None
fixture = {
'image': {
'id': 1,
'name': 'Image1',
'created': self.TIMESTAMP,
'updated': self.TIMESTAMP,
'status': 'ACTIVE',
'metadata': {
'key1': 'value1',
},
'links': [
{
'href': self.IMAGE_HREF % 1,
'rel': 'self',
},
{
'href': self.IMAGE_BOOKMARK % 1,
'rel': 'bookmark',
},
],
},
}
output = serializer.serialize(fixture, 'show')
actual = minidom.parseString(output.replace(" ", ""))
expected_href = self.IMAGE_HREF % 1
expected_bookmark = self.IMAGE_BOOKMARK % 1
expected_now = self.TIMESTAMP
expected = minidom.parseString("""
<image id="1"
xmlns="http://docs.openstack.org/compute/api/v1.1"
xmlns:atom="http://www.w3.org/2005/Atom"
name="Image1"
updated="%(expected_now)s"
created="%(expected_now)s"
status="ACTIVE">
<metadata>
<meta key="key1">
value1
</meta>
</metadata>
<atom:link href="%(expected_href)s" rel="self"/>
<atom:link href="%(expected_bookmark)s" rel="bookmark"/>
</image>
""".replace(" ", "") % (locals()))
@@ -1528,7 +1618,7 @@ class ImageXMLSerializationTest(test.TestCase):
},
'links': [
{
'href': self.IMAGE_HREF % (1,),
'href': self.IMAGE_HREF % 1,
'rel': 'bookmark',
'type': 'application/json',
},
@@ -1540,7 +1630,7 @@ class ImageXMLSerializationTest(test.TestCase):
actual = minidom.parseString(output.replace(" ", ""))
expected_server_href = self.SERVER_HREF
expected_href = self.IMAGE_HREF % (1, )
expected_href = self.IMAGE_HREF % 1
expected_now = self.TIMESTAMP
expected = minidom.parseString("""
<image id="1"