added a simple test for a tunnel node, although better testing awwma to require configuration outside of core

This commit is contained in:
Blake J. Harnden 2017-08-03 09:37:22 -07:00
parent b62076c240
commit d915436c7d
3 changed files with 102 additions and 26 deletions

View file

@ -212,7 +212,6 @@ class MobilityManager(ConfigurableManager):
try: try:
n = self.session.get_object(nodenum) n = self.session.get_object(nodenum)
except KeyError: except KeyError:
logger.exception("error getting session object, this was ignored before")
continue continue
if n.model: if n.model:
n.model.update(moved, moved_netifs) n.model.update(moved, moved_netifs)

View file

@ -62,7 +62,7 @@ def node_message(objid, name, emulation_server=None, node_type=NodeTypes.DEFAULT
return CoreNodeMessage.create(MessageFlags.ADD.value, values) return CoreNodeMessage.create(MessageFlags.ADD.value, values)
def link_message(n1, n2, intf_one=None, address_one=None, intf_two=None, address_two=None): def link_message(n1, n2, intf_one=None, address_one=None, intf_two=None, address_two=None, key=None):
""" """
Convenience method for creating link TLV messages. Convenience method for creating link TLV messages.
@ -72,6 +72,7 @@ def link_message(n1, n2, intf_one=None, address_one=None, intf_two=None, address
:param core.misc.ipaddress.IpAddress address_one: node one ip4 address :param core.misc.ipaddress.IpAddress address_one: node one ip4 address
:param int intf_two: node two interface id :param int intf_two: node two interface id
:param core.misc.ipaddress.IpAddress address_two: node two ip4 address :param core.misc.ipaddress.IpAddress address_two: node two ip4 address
:param int key: tunnel key for link if needed
:return: tlv mesage :return: tlv mesage
:rtype: core.api.coreapi.CoreLinkMessage :rtype: core.api.coreapi.CoreLinkMessage
""" """
@ -81,7 +82,7 @@ def link_message(n1, n2, intf_one=None, address_one=None, intf_two=None, address
if address_two: if address_two:
mac_two = MacAddress.random() mac_two = MacAddress.random()
return CoreLinkMessage.create(MessageFlags.ADD.value, [ values = [
(LinkTlvs.N1_NUMBER, n1), (LinkTlvs.N1_NUMBER, n1),
(LinkTlvs.N2_NUMBER, n2), (LinkTlvs.N2_NUMBER, n2),
(LinkTlvs.DELAY, 0), (LinkTlvs.DELAY, 0),
@ -98,7 +99,12 @@ def link_message(n1, n2, intf_one=None, address_one=None, intf_two=None, address
(LinkTlvs.INTERFACE2_IP4, address_two), (LinkTlvs.INTERFACE2_IP4, address_two),
(LinkTlvs.INTERFACE2_IP4_MASK, 24), (LinkTlvs.INTERFACE2_IP4_MASK, 24),
(LinkTlvs.INTERFACE2_MAC, mac_two), (LinkTlvs.INTERFACE2_MAC, mac_two),
]) ]
if key:
values.append((LinkTlvs.KEY, key))
return CoreLinkMessage.create(MessageFlags.ADD.value, values)
def command_message(node, command): def command_message(node, command):
@ -258,6 +264,9 @@ class CoreServerTest(object):
self.request_handler = None self.request_handler = None
def setup(self, distributed_address): def setup(self, distributed_address):
# validate address
assert distributed_address, "distributed server address was not provided"
# create session # create session
self.session = self.server.create_session(1) self.session = self.server.create_session(1)
self.session.master = True self.session.master = True

View file

@ -9,6 +9,7 @@ from core.enumerations import EventTypes
from core.enumerations import ExecuteTlvs from core.enumerations import ExecuteTlvs
from core.enumerations import MessageFlags from core.enumerations import MessageFlags
from core.enumerations import NodeTypes from core.enumerations import NodeTypes
from core.misc.ipaddress import IpAddress
def validate_response(replies, _): def validate_response(replies, _):
@ -29,25 +30,26 @@ def validate_response(replies, _):
class TestDistributed: class TestDistributed:
def test_distributed(self, cored, distributed_address): def test_distributed(self, cored, distributed_address):
""" """
Test session broker creation. Test creating a distributed network.
:param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with :param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with
:param str distributed_address: distributed server to test against :param str distributed_address: distributed server to test against
""" """
assert distributed_address, "distributed server address was not provided"
# initialize server for testing # initialize server for testing
cored.setup(distributed_address) cored.setup(distributed_address)
# create local node # create local node
message = conftest.node_message(1, "n1", model="host") message = conftest.node_message(
objid=1,
name="n1",
model="host"
)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# create distributed node and assign to distributed server # create distributed node and assign to distributed server
message = conftest.node_message( message = conftest.node_message(
2, objid=2,
"n2", name="n2",
emulation_server=cored.distributed_server, emulation_server=cored.distributed_server,
model="host" model="host"
) )
@ -55,8 +57,8 @@ class TestDistributed:
# create distributed switch and assign to distributed server # create distributed switch and assign to distributed server
message = conftest.node_message( message = conftest.node_message(
3, objid=3,
"n3", name="n3",
emulation_server=cored.distributed_server, emulation_server=cored.distributed_server,
node_type=NodeTypes.SWITCH node_type=NodeTypes.SWITCH
) )
@ -64,12 +66,22 @@ class TestDistributed:
# link message one # link message one
ip4_address = cored.prefix.addr(1) ip4_address = cored.prefix.addr(1)
message = conftest.link_message(1, 3, intf_one=0, address_one=ip4_address) message = conftest.link_message(
n1=1,
n2=3,
intf_one=0,
address_one=ip4_address
)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# link message two # link message two
ip4_address = cored.prefix.addr(2) ip4_address = cored.prefix.addr(2)
message = conftest.link_message(3, 2, intf_two=0, address_two=ip4_address) message = conftest.link_message(
n1=3,
n2=2,
intf_two=0,
address_two=ip4_address
)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# change session to instantiation state # change session to instantiation state
@ -84,25 +96,26 @@ class TestDistributed:
def test_prouter(self, cored, distributed_address): def test_prouter(self, cored, distributed_address):
""" """
Test session broker creation. Test creating a distributed prouter node.
:param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with :param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with
:param str distributed_address: distributed server to test against :param str distributed_address: distributed server to test against
""" """
assert distributed_address, "distributed server address was not provided"
# initialize server for testing # initialize server for testing
cored.setup(distributed_address) cored.setup(distributed_address)
# create local node # create local node
message = conftest.node_message(1, "n1", model="host") message = conftest.node_message(
objid=1,
name="n1",
model="host"
)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# create distributed node and assign to distributed server # create distributed node and assign to distributed server
message = conftest.node_message( message = conftest.node_message(
2, objid=2,
"n2", name="n2",
emulation_server=cored.distributed_server, emulation_server=cored.distributed_server,
node_type=NodeTypes.PHYSICAL, node_type=NodeTypes.PHYSICAL,
model="prouter" model="prouter"
@ -111,20 +124,30 @@ class TestDistributed:
# create distributed switch and assign to distributed server # create distributed switch and assign to distributed server
message = conftest.node_message( message = conftest.node_message(
3, objid=3,
"n3", name="n3",
node_type=NodeTypes.SWITCH node_type=NodeTypes.SWITCH
) )
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# link message one # link message one
ip4_address = cored.prefix.addr(1) ip4_address = cored.prefix.addr(1)
message = conftest.link_message(1, 3, intf_one=0, address_one=ip4_address) message = conftest.link_message(
n1=1,
n2=3,
intf_one=0,
address_one=ip4_address
)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# link message two # link message two
ip4_address = cored.prefix.addr(2) ip4_address = cored.prefix.addr(2)
message = conftest.link_message(3, 2, intf_two=0, address_two=ip4_address) message = conftest.link_message(
n1=3,
n2=2,
intf_two=0,
address_two=ip4_address
)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
# change session to instantiation state # change session to instantiation state
@ -137,3 +160,48 @@ class TestDistributed:
cored.request_handler.dispatch_replies = validate_response cored.request_handler.dispatch_replies = validate_response
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
cored.request_handler.handle_message(message) cored.request_handler.handle_message(message)
def test_tunnel(self, cored, distributed_address):
"""
Test session broker creation.
:param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with
:param str distributed_address: distributed server to test against
"""
# initialize server for testing
cored.setup(distributed_address)
# create local node
message = conftest.node_message(
objid=1,
name="n1",
model="host"
)
cored.request_handler.handle_message(message)
# create distributed node and assign to distributed server
message = conftest.node_message(
objid=2,
name=distributed_address,
emulation_server=cored.distributed_server,
node_type=NodeTypes.TUNNEL
)
cored.request_handler.handle_message(message)
# link message one
ip4_address = cored.prefix.addr(1)
address_two = IpAddress.from_string(distributed_address)
message = conftest.link_message(
n1=1,
n2=2,
intf_one=0,
address_one=ip4_address,
intf_two=0,
address_two=address_two,
key=1
)
cored.request_handler.handle_message(message)
# change session to instantiation state
message = conftest.state_message(EventTypes.INSTANTIATION_STATE)
cored.request_handler.handle_message(message)