Port ips-extended to API-v3 ips core API Part 2

This includes on ips responses extended ip information: mac address and type,
adds V3 version of the views and the tests to also test this information, which
affects servers and ips core API.

related to bp nova-v3-api

Change-Id: I699f6e27b53663f358b63615e7dd0f1627c4730b
This commit is contained in:
Mauro S. M. Rodrigues
2013-07-18 13:53:01 -04:00
parent d74c09f4e8
commit 310105016c
7 changed files with 184 additions and 59 deletions

View File

@@ -19,7 +19,7 @@ from webob import exc
import nova import nova
from nova.api.openstack import common from nova.api.openstack import common
from nova.api.openstack.compute.views import addresses as view_addresses from nova.api.openstack.compute.views import addresses as views_addresses
from nova.api.openstack import extensions from nova.api.openstack import extensions
from nova.api.openstack import wsgi from nova.api.openstack import wsgi
from nova.api.openstack import xmlutil from nova.api.openstack import xmlutil
@@ -31,7 +31,8 @@ def make_network(elem):
ip = xmlutil.SubTemplateElement(elem, 'ip', selector=1) ip = xmlutil.SubTemplateElement(elem, 'ip', selector=1)
ip.set('version') ip.set('version')
ip.set('addr') ip.set('addr')
ip.set('type')
ip.set('mac_addr')
network_nsmap = {None: xmlutil.XMLNS_V11} network_nsmap = {None: xmlutil.XMLNS_V11}
@@ -56,7 +57,7 @@ class AddressesTemplate(xmlutil.TemplateBuilder):
class IPsController(wsgi.Controller): class IPsController(wsgi.Controller):
"""The servers addresses API controller for the OpenStack API.""" """The servers addresses API controller for the OpenStack API."""
_view_builder_class = view_addresses.ViewBuilder _view_builder_class = views_addresses.ViewBuilderV3
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(IPsController, self).__init__(**kwargs) super(IPsController, self).__init__(**kwargs)

View File

@@ -24,7 +24,7 @@ import webob
from webob import exc from webob import exc
from nova.api.openstack import common from nova.api.openstack import common
from nova.api.openstack.compute import ips from nova.api.openstack.compute.plugins.v3 import ips
from nova.api.openstack.compute.views import servers as views_servers from nova.api.openstack.compute.views import servers as views_servers
from nova.api.openstack import extensions from nova.api.openstack import extensions
from nova.api.openstack import wsgi from nova.api.openstack import wsgi
@@ -436,7 +436,7 @@ class ServersController(wsgi.Controller):
EXTENSION_CREATE_NAMESPACE = 'nova.api.v3.extensions.server.create' EXTENSION_CREATE_NAMESPACE = 'nova.api.v3.extensions.server.create'
EXTENSION_DESERIALIZE_EXTRACT_SERVER_NAMESPACE = ( EXTENSION_DESERIALIZE_EXTRACT_SERVER_NAMESPACE = (
'nova.api.v3.extensions.server.create.deserialize') 'nova.api.v3.extensions.server.create.deserialize')
_view_builder_class = views_servers.ViewBuilder _view_builder_class = views_servers.ViewBuilderV3
@staticmethod @staticmethod
def _add_location(robj): def _add_location(robj):

View File

@@ -7,6 +7,8 @@
<element name="ip"> <element name="ip">
<attribute name="version"> <text/> </attribute> <attribute name="version"> <text/> </attribute>
<attribute name="addr"> <text/> </attribute> <attribute name="addr"> <text/> </attribute>
<attribute name="type"> <text/> </attribute>
<attribute name="mac_addr"> <text/> </attribute>
</element> </element>
</zeroOrMore> </zeroOrMore>
</element> </element>

View File

@@ -40,19 +40,9 @@
</element> </element>
</zeroOrMore> </zeroOrMore>
</element> </element>
<element name="addresses"> <oneOrMore>
<zeroOrMore> <externalRef href="addresses.rng"/>
<element name="network"> </oneOrMore>
<attribute name="id"> <text/> </attribute>
<zeroOrMore>
<element name="ip">
<attribute name="version"> <text/> </attribute>
<attribute name="addr"> <text/> </attribute>
</element>
</zeroOrMore>
</element>
</zeroOrMore>
</element>
<zeroOrMore> <zeroOrMore>
<externalRef href="../atom-link.rng"/> <externalRef href="../atom-link.rng"/>
</zeroOrMore> </zeroOrMore>

View File

@@ -44,3 +44,15 @@ class ViewBuilder(common.ViewBuilder):
network_dict = self.show(network, label) network_dict = self.show(network, label)
addresses[label] = network_dict[label] addresses[label] = network_dict[label]
return dict(addresses=addresses) return dict(addresses=addresses)
class ViewBuilderV3(ViewBuilder):
"""Models server addresses as a dictionary."""
def basic(self, ip):
"""Return a dictionary describing an IP address."""
return {
"version": ip["version"],
"addr": ip["address"],
"type": ip["type"],
"mac_addr": ip['mac_address'],
}

View File

@@ -218,3 +218,11 @@ class ViewBuilder(common.ViewBuilder):
fault_dict['details'] = fault["details"] fault_dict['details'] = fault["details"]
return fault_dict return fault_dict
class ViewBuilderV3(ViewBuilder):
def __init__(self):
"""Initialize view builder."""
super(ViewBuilderV3, self).__init__()
self._address_builder = views_addresses.ViewBuilderV3()

View File

@@ -308,8 +308,10 @@ class ServersControllerTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
] ]
}, },
"metadata": { "metadata": {
@@ -374,8 +376,10 @@ class ServersControllerTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
] ]
}, },
"metadata": { "metadata": {
@@ -443,8 +447,10 @@ class ServersControllerTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
] ]
}, },
"metadata": { "metadata": {
@@ -503,14 +509,20 @@ class ServersControllerTest(test.TestCase):
expected = { expected = {
'addresses': { 'addresses': {
'private': [ 'private': [
{'version': 4, 'addr': '192.168.0.3'}, {'version': 4, 'addr': '192.168.0.3',
{'version': 4, 'addr': '192.168.0.4'}, 'type': 'fixed', 'mac_addr': 'bb:bb:bb:bb:bb:bb'},
{'version': 4, 'addr': '192.168.0.4',
'type': 'fixed', 'mac_addr': 'bb:bb:bb:bb:bb:bb'},
], ],
'public': [ 'public': [
{'version': 4, 'addr': '172.19.0.1'}, {'version': 4, 'addr': '172.19.0.1',
{'version': 4, 'addr': '172.19.0.2'}, 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 4, 'addr': '1.2.3.4'}, {'version': 4, 'addr': '172.19.0.2',
{'version': 6, 'addr': 'b33f::fdee:ddff:fecc:bbaa'}, 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 4, 'addr': '1.2.3.4',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': 'b33f::fdee:ddff:fecc:bbaa',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
], ],
}, },
} }
@@ -3979,8 +3991,10 @@ class TestAddressesXMLSerialization(test.TestCase):
def test_xml_declaration(self): def test_xml_declaration(self):
fixture = { fixture = {
'network_2': [ 'network_2': [
{'addr': '192.168.0.1', 'version': 4}, {'addr': '192.168.0.1', 'version': 4,
{'addr': 'fe80::beef', 'version': 6}, 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'addr': 'fe80::beef', 'version': 6,
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
], ],
} }
output = self.show_serializer.serialize(fixture) output = self.show_serializer.serialize(fixture)
@@ -3990,8 +4004,10 @@ class TestAddressesXMLSerialization(test.TestCase):
def test_show(self): def test_show(self):
fixture = { fixture = {
'network_2': [ 'network_2': [
{'addr': '192.168.0.1', 'version': 4}, {'addr': '192.168.0.1', 'version': 4,
{'addr': 'fe80::beef', 'version': 6}, 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'addr': 'fe80::beef', 'version': 6,
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
], ],
} }
output = self.show_serializer.serialize(fixture) output = self.show_serializer.serialize(fixture)
@@ -4005,23 +4021,31 @@ class TestAddressesXMLSerialization(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
def test_index(self): def test_index(self):
fixture = { fixture = {
'addresses': { 'addresses': {
'network_1': [ 'network_1': [
{'addr': '192.168.0.3', 'version': 4}, {'addr': '192.168.0.3', 'version': 4,
{'addr': '192.168.0.5', 'version': 4}, 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'addr': '192.168.0.5', 'version': 4,
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
], ],
'network_2': [ 'network_2': [
{'addr': '192.168.0.1', 'version': 4}, {'addr': '192.168.0.1', 'version': 4,
{'addr': 'fe80::beef', 'version': 6}, 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'addr': 'fe80::beef', 'version': 6,
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
], ],
}, },
} }
output = self.index_serializer.serialize(fixture) output = self.index_serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'addresses') xmlutil.validate_schema(root, 'addresses', version='v3')
addresses_dict = fixture['addresses'] addresses_dict = fixture['addresses']
network_elems = root.findall('{0}network'.format(NS)) network_elems = root.findall('{0}network'.format(NS))
self.assertEqual(len(network_elems), 2) self.assertEqual(len(network_elems), 2)
@@ -4035,6 +4059,10 @@ class TestAddressesXMLSerialization(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
class ServersViewBuilderTest(test.TestCase): class ServersViewBuilderTest(test.TestCase):
@@ -4068,7 +4096,7 @@ class ServersViewBuilderTest(test.TestCase):
floaters) floaters)
self.uuid = self.instance['uuid'] self.uuid = self.instance['uuid']
self.view_builder = views.servers.ViewBuilder() self.view_builder = views.servers.ViewBuilderV3()
self.request = fakes.HTTPRequestV3.blank("") self.request = fakes.HTTPRequestV3.blank("")
def test_get_flavor_valid_instance_type(self): def test_get_flavor_valid_instance_type(self):
@@ -4162,8 +4190,10 @@ class ServersViewBuilderTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
] ]
}, },
"metadata": {}, "metadata": {},
@@ -4234,8 +4264,10 @@ class ServersViewBuilderTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
] ]
}, },
"metadata": {}, "metadata": {},
@@ -4380,8 +4412,10 @@ class ServersViewBuilderTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'}
] ]
}, },
"metadata": {}, "metadata": {},
@@ -4440,8 +4474,10 @@ class ServersViewBuilderTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
] ]
}, },
"metadata": {}, "metadata": {},
@@ -4502,8 +4538,10 @@ class ServersViewBuilderTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
] ]
}, },
"metadata": {}, "metadata": {},
@@ -4568,8 +4606,10 @@ class ServersViewBuilderTest(test.TestCase):
}, },
"addresses": { "addresses": {
'test1': [ 'test1': [
{'version': 4, 'addr': '192.168.1.100'}, {'version': 4, 'addr': '192.168.1.100',
{'version': 6, 'addr': '2001:db8:0:1::1'} 'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
{'version': 6, 'addr': '2001:db8:0:1::1',
'type': 'fixed', 'mac_addr': 'aa:aa:aa:aa:aa:aa'},
] ]
}, },
"metadata": {"Open": "Stack"}, "metadata": {"Open": "Stack"},
@@ -4638,20 +4678,28 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
"network_two": [ "network_two": [
{ {
"version": 4, "version": 4,
"addr": "67.23.10.139", "addr": "67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.139", "addr": "::babe:67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -4715,20 +4763,28 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
"network_two": [ "network_two": [
{ {
"version": 4, "version": 4,
"addr": "67.23.10.139", "addr": "67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.139", "addr": "::babe:67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -4751,7 +4807,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'server') xmlutil.validate_schema(root, 'server', version='v3')
server_dict = fixture['server'] server_dict = fixture['server']
@@ -4804,6 +4860,10 @@ class ServerXMLSerializationTest(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
def test_create(self): def test_create(self):
serializer = servers.FullServerTemplate() serializer = servers.FullServerTemplate()
@@ -4845,20 +4905,28 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
"network_two": [ "network_two": [
{ {
"version": 4, "version": 4,
"addr": "67.23.10.139", "addr": "67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.139", "addr": "::babe:67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -4881,7 +4949,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'server') xmlutil.validate_schema(root, 'server', version='v3')
server_dict = fixture['server'] server_dict = fixture['server']
@@ -4934,6 +5002,10 @@ class ServerXMLSerializationTest(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
def test_index(self): def test_index(self):
serializer = servers.MinimalServersTemplate() serializer = servers.MinimalServersTemplate()
@@ -4977,7 +5049,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'servers_index') xmlutil.validate_schema(root, 'servers_index', version='v3')
server_elems = root.findall('{0}server'.format(NS)) server_elems = root.findall('{0}server'.format(NS))
self.assertEqual(len(server_elems), 2) self.assertEqual(len(server_elems), 2)
for i, server_elem in enumerate(server_elems): for i, server_elem in enumerate(server_elems):
@@ -5040,7 +5112,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'servers_index') xmlutil.validate_schema(root, 'servers_index', version='v3')
server_elems = root.findall('{0}server'.format(NS)) server_elems = root.findall('{0}server'.format(NS))
self.assertEqual(len(server_elems), 2) self.assertEqual(len(server_elems), 2)
for i, server_elem in enumerate(server_elems): for i, server_elem in enumerate(server_elems):
@@ -5108,10 +5180,16 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -5164,10 +5242,16 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -5189,7 +5273,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'servers') xmlutil.validate_schema(root, 'servers', version='v3')
server_elems = root.findall('{0}server'.format(NS)) server_elems = root.findall('{0}server'.format(NS))
self.assertEqual(len(server_elems), 2) self.assertEqual(len(server_elems), 2)
for i, server_elem in enumerate(server_elems): for i, server_elem in enumerate(server_elems):
@@ -5244,6 +5328,10 @@ class ServerXMLSerializationTest(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
def test_update(self): def test_update(self):
serializer = servers.ServerTemplate() serializer = servers.ServerTemplate()
@@ -5284,20 +5372,28 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
"network_two": [ "network_two": [
{ {
"version": 4, "version": 4,
"addr": "67.23.10.139", "addr": "67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.139", "addr": "::babe:67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -5326,7 +5422,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'server') xmlutil.validate_schema(root, 'server', version='v3')
server_dict = fixture['server'] server_dict = fixture['server']
@@ -5379,6 +5475,10 @@ class ServerXMLSerializationTest(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
fault_root = root.find('{0}fault'.format(NS)) fault_root = root.find('{0}fault'.format(NS))
fault_dict = server_dict['fault'] fault_dict = server_dict['fault']
@@ -5429,20 +5529,28 @@ class ServerXMLSerializationTest(test.TestCase):
{ {
"version": 4, "version": 4,
"addr": "67.23.10.138", "addr": "67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.138", "addr": "::babe:67.23.10.138",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
"network_two": [ "network_two": [
{ {
"version": 4, "version": 4,
"addr": "67.23.10.139", "addr": "67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
{ {
"version": 6, "version": 6,
"addr": "::babe:67.23.10.139", "addr": "::babe:67.23.10.139",
"type": "fixed",
"mac_addr": "aa:aa:aa:aa:aa:aa"
}, },
], ],
}, },
@@ -5465,7 +5573,7 @@ class ServerXMLSerializationTest(test.TestCase):
output = serializer.serialize(fixture) output = serializer.serialize(fixture)
root = etree.XML(output) root = etree.XML(output)
xmlutil.validate_schema(root, 'server') xmlutil.validate_schema(root, 'server', version='v3')
server_dict = fixture['server'] server_dict = fixture['server']
@@ -5518,6 +5626,10 @@ class ServerXMLSerializationTest(test.TestCase):
str(ip['version'])) str(ip['version']))
self.assertEqual(str(ip_elem.get('addr')), self.assertEqual(str(ip_elem.get('addr')),
str(ip['addr'])) str(ip['addr']))
self.assertEqual(str(ip_elem.get('type')),
str(ip['type']))
self.assertEqual(str(ip_elem.get('mac_addr')),
str(ip['mac_addr']))
class ServersAllExtensionsTestCase(test.TestCase): class ServersAllExtensionsTestCase(test.TestCase):