make server and image metadata optional
This commit is contained in:
@@ -285,9 +285,10 @@ class ImageXMLSerializer(wsgi.DictSerializer):
|
|||||||
server_node = self._create_server_node(xml_doc, image['server'])
|
server_node = self._create_server_node(xml_doc, image['server'])
|
||||||
image_node.appendChild(server_node)
|
image_node.appendChild(server_node)
|
||||||
|
|
||||||
metadata = image.get('metadata', {})
|
metadata = image.get('metadata', {}).items()
|
||||||
metadata_node = self._create_metadata_node(xml_doc, metadata.items())
|
if len(metadata) > 0:
|
||||||
image_node.appendChild(metadata_node)
|
metadata_node = self._create_metadata_node(xml_doc, metadata)
|
||||||
|
image_node.appendChild(metadata_node)
|
||||||
|
|
||||||
self._add_atom_links(xml_doc, image_node, image['links'])
|
self._add_atom_links(xml_doc, image_node, image['links'])
|
||||||
|
|
||||||
|
|||||||
@@ -1197,11 +1197,11 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
},
|
},
|
||||||
'links': [
|
'links': [
|
||||||
{
|
{
|
||||||
'href': self.IMAGE_HREF % (1,),
|
'href': self.IMAGE_HREF % 1,
|
||||||
'rel': 'self',
|
'rel': 'self',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'href': self.IMAGE_BOOKMARK % (1,),
|
'href': self.IMAGE_BOOKMARK % 1,
|
||||||
'rel': 'bookmark',
|
'rel': 'bookmark',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -1213,8 +1213,8 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
|
|
||||||
expected_server_href = self.SERVER_HREF
|
expected_server_href = self.SERVER_HREF
|
||||||
expected_server_bookmark = self.SERVER_BOOKMARK
|
expected_server_bookmark = self.SERVER_BOOKMARK
|
||||||
expected_href = self.IMAGE_HREF % (1, )
|
expected_href = self.IMAGE_HREF % 1
|
||||||
expected_bookmark = self.IMAGE_BOOKMARK % (1, )
|
expected_bookmark = self.IMAGE_BOOKMARK % 1
|
||||||
expected_now = self.TIMESTAMP
|
expected_now = self.TIMESTAMP
|
||||||
expected = minidom.parseString("""
|
expected = minidom.parseString("""
|
||||||
<image id="1"
|
<image id="1"
|
||||||
@@ -1239,28 +1239,42 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
</image>
|
</image>
|
||||||
""".replace(" ", "") % (locals()))
|
""".replace(" ", "") % (locals()))
|
||||||
|
|
||||||
print expected.toxml()
|
|
||||||
print '---'
|
|
||||||
print actual.toxml()
|
|
||||||
self.assertEqual(expected.toxml(), actual.toxml())
|
self.assertEqual(expected.toxml(), actual.toxml())
|
||||||
|
|
||||||
def test_show_zero_metadata(self):
|
def test_show_zero_metadata(self):
|
||||||
serializer = images.ImageXMLSerializer()
|
serializer = images.ImageXMLSerializer()
|
||||||
|
|
||||||
|
self.maxDiff = None
|
||||||
fixture = {
|
fixture = {
|
||||||
'image': {
|
'image': {
|
||||||
'id': 1,
|
'id': 1,
|
||||||
'name': 'Image1',
|
'name': 'Image1',
|
||||||
'created': self.TIMESTAMP,
|
'created': self.TIMESTAMP,
|
||||||
'updated': self.TIMESTAMP,
|
'updated': self.TIMESTAMP,
|
||||||
'serverRef': self.SERVER_HREF,
|
|
||||||
'status': 'ACTIVE',
|
'status': 'ACTIVE',
|
||||||
|
'server': {
|
||||||
|
'id': 1,
|
||||||
|
'name': 'Server1',
|
||||||
|
'links': [
|
||||||
|
{
|
||||||
|
'href': self.SERVER_HREF,
|
||||||
|
'rel': 'self',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'href': self.SERVER_BOOKMARK,
|
||||||
|
'rel': 'bookmark',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
'metadata': {},
|
'metadata': {},
|
||||||
'links': [
|
'links': [
|
||||||
{
|
{
|
||||||
'href': self.IMAGE_HREF % (1,),
|
'href': self.IMAGE_HREF % 1,
|
||||||
|
'rel': 'self',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'href': self.IMAGE_BOOKMARK % 1,
|
||||||
'rel': 'bookmark',
|
'rel': 'bookmark',
|
||||||
'type': 'application/json',
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -1270,21 +1284,24 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
actual = minidom.parseString(output.replace(" ", ""))
|
actual = minidom.parseString(output.replace(" ", ""))
|
||||||
|
|
||||||
expected_server_href = self.SERVER_HREF
|
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_now = self.TIMESTAMP
|
||||||
expected = minidom.parseString("""
|
expected = minidom.parseString("""
|
||||||
<image id="1"
|
<image id="1"
|
||||||
|
xmlns="http://docs.openstack.org/compute/api/v1.1"
|
||||||
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||||
name="Image1"
|
name="Image1"
|
||||||
serverRef="%(expected_server_href)s"
|
|
||||||
updated="%(expected_now)s"
|
updated="%(expected_now)s"
|
||||||
created="%(expected_now)s"
|
created="%(expected_now)s"
|
||||||
status="ACTIVE"
|
status="ACTIVE">
|
||||||
xmlns="http://docs.openstack.org/compute/api/v1.1">
|
<server name="Server1" id="1">
|
||||||
<links>
|
<atom:link rel="self" href="%(expected_server_href)s"/>
|
||||||
<link href="%(expected_href)s" rel="bookmark"
|
<atom:link rel="bookmark" href="%(expected_server_bookmark)s"/>
|
||||||
type="application/json" />
|
</server>
|
||||||
</links>
|
<atom:link href="%(expected_href)s" rel="self"/>
|
||||||
<metadata />
|
<atom:link href="%(expected_bookmark)s" rel="bookmark"/>
|
||||||
</image>
|
</image>
|
||||||
""".replace(" ", "") % (locals()))
|
""".replace(" ", "") % (locals()))
|
||||||
|
|
||||||
@@ -1293,22 +1310,38 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
def test_show_image_no_metadata_key(self):
|
def test_show_image_no_metadata_key(self):
|
||||||
serializer = images.ImageXMLSerializer()
|
serializer = images.ImageXMLSerializer()
|
||||||
|
|
||||||
|
self.maxDiff = None
|
||||||
fixture = {
|
fixture = {
|
||||||
'image': {
|
'image': {
|
||||||
'id': 1,
|
'id': 1,
|
||||||
'name': 'Image1',
|
'name': 'Image1',
|
||||||
'created': self.TIMESTAMP,
|
'created': self.TIMESTAMP,
|
||||||
'updated': self.TIMESTAMP,
|
'updated': self.TIMESTAMP,
|
||||||
'serverRef': self.SERVER_HREF,
|
|
||||||
'status': 'ACTIVE',
|
'status': 'ACTIVE',
|
||||||
|
'server': {
|
||||||
|
'id': 1,
|
||||||
|
'name': 'Server1',
|
||||||
|
'links': [
|
||||||
|
{
|
||||||
|
'href': self.SERVER_HREF,
|
||||||
|
'rel': 'self',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'href': self.SERVER_BOOKMARK,
|
||||||
|
'rel': 'bookmark',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
'links': [
|
'links': [
|
||||||
{
|
{
|
||||||
'href': self.IMAGE_HREF % (1,),
|
'href': self.IMAGE_HREF % 1,
|
||||||
|
'rel': 'self',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'href': self.IMAGE_BOOKMARK % 1,
|
||||||
'rel': 'bookmark',
|
'rel': 'bookmark',
|
||||||
'type': 'application/json',
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1316,21 +1349,78 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
actual = minidom.parseString(output.replace(" ", ""))
|
actual = minidom.parseString(output.replace(" ", ""))
|
||||||
|
|
||||||
expected_server_href = self.SERVER_HREF
|
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_now = self.TIMESTAMP
|
||||||
expected = minidom.parseString("""
|
expected = minidom.parseString("""
|
||||||
<image id="1"
|
<image id="1"
|
||||||
|
xmlns="http://docs.openstack.org/compute/api/v1.1"
|
||||||
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||||
name="Image1"
|
name="Image1"
|
||||||
serverRef="%(expected_server_href)s"
|
|
||||||
updated="%(expected_now)s"
|
updated="%(expected_now)s"
|
||||||
created="%(expected_now)s"
|
created="%(expected_now)s"
|
||||||
status="ACTIVE"
|
status="ACTIVE">
|
||||||
xmlns="http://docs.openstack.org/compute/api/v1.1">
|
<server name="Server1" id="1">
|
||||||
<links>
|
<atom:link rel="self" href="%(expected_server_href)s"/>
|
||||||
<link href="%(expected_href)s" rel="bookmark"
|
<atom:link rel="bookmark" href="%(expected_server_bookmark)s"/>
|
||||||
type="application/json" />
|
</server>
|
||||||
</links>
|
<atom:link href="%(expected_href)s" rel="self"/>
|
||||||
<metadata />
|
<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>
|
</image>
|
||||||
""".replace(" ", "") % (locals()))
|
""".replace(" ", "") % (locals()))
|
||||||
|
|
||||||
@@ -1528,7 +1618,7 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
},
|
},
|
||||||
'links': [
|
'links': [
|
||||||
{
|
{
|
||||||
'href': self.IMAGE_HREF % (1,),
|
'href': self.IMAGE_HREF % 1,
|
||||||
'rel': 'bookmark',
|
'rel': 'bookmark',
|
||||||
'type': 'application/json',
|
'type': 'application/json',
|
||||||
},
|
},
|
||||||
@@ -1540,7 +1630,7 @@ class ImageXMLSerializationTest(test.TestCase):
|
|||||||
actual = minidom.parseString(output.replace(" ", ""))
|
actual = minidom.parseString(output.replace(" ", ""))
|
||||||
|
|
||||||
expected_server_href = self.SERVER_HREF
|
expected_server_href = self.SERVER_HREF
|
||||||
expected_href = self.IMAGE_HREF % (1, )
|
expected_href = self.IMAGE_HREF % 1
|
||||||
expected_now = self.TIMESTAMP
|
expected_now = self.TIMESTAMP
|
||||||
expected = minidom.parseString("""
|
expected = minidom.parseString("""
|
||||||
<image id="1"
|
<image id="1"
|
||||||
|
|||||||
Reference in New Issue
Block a user