merged latest updates from develop
This commit is contained in:
commit
d83bfed608
34 changed files with 1840 additions and 1901 deletions
|
@ -9,7 +9,6 @@ from typing import List, Type
|
|||
import pytest
|
||||
|
||||
from core.emulator.data import IpPrefixes, NodeOptions
|
||||
from core.emulator.enumerations import MessageFlags
|
||||
from core.emulator.session import Session
|
||||
from core.errors import CoreCommandError
|
||||
from core.location.mobility import BasicRangeModel, Ns2ScriptedMobility
|
||||
|
@ -63,44 +62,6 @@ class TestCore:
|
|||
status = ping(node1, node2, ip_prefixes)
|
||||
assert not status
|
||||
|
||||
def test_iface(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
"""
|
||||
Test interface methods.
|
||||
|
||||
:param session: session for test
|
||||
:param ip_prefixes: generates ip addresses for nodes
|
||||
"""
|
||||
|
||||
# create ptp
|
||||
ptp_node = session.add_node(PtpNet)
|
||||
|
||||
# create nodes
|
||||
node1 = session.add_node(CoreNode)
|
||||
node2 = session.add_node(CoreNode)
|
||||
|
||||
# link nodes to ptp net
|
||||
for node in [node1, node2]:
|
||||
iface = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, ptp_node.id, iface1_data=iface)
|
||||
|
||||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# check link data gets generated
|
||||
assert ptp_node.links(MessageFlags.ADD)
|
||||
|
||||
# check common nets exist between linked nodes
|
||||
assert node1.commonnets(node2)
|
||||
assert node2.commonnets(node1)
|
||||
|
||||
# check we can retrieve interface id
|
||||
assert 0 in node1.ifaces
|
||||
assert 0 in node2.ifaces
|
||||
|
||||
# delete interface and test that if no longer exists
|
||||
node1.delete_iface(0)
|
||||
assert 0 not in node1.ifaces
|
||||
|
||||
def test_wlan_ping(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
"""
|
||||
Test basic wlan network.
|
||||
|
|
|
@ -29,12 +29,14 @@ class TestDistributed:
|
|||
|
||||
# when
|
||||
session.distributed.add_server(server_name, host)
|
||||
node1 = session.add_node(HubNode)
|
||||
options = NodeOptions(server=server_name)
|
||||
node = session.add_node(HubNode, options=options)
|
||||
node2 = session.add_node(HubNode, options=options)
|
||||
session.add_link(node1.id, node2.id)
|
||||
session.instantiate()
|
||||
|
||||
# then
|
||||
assert node.server is not None
|
||||
assert node.server.name == server_name
|
||||
assert node.server.host == host
|
||||
assert len(session.distributed.tunnels) > 0
|
||||
assert node2.server is not None
|
||||
assert node2.server.name == server_name
|
||||
assert node2.server.host == host
|
||||
assert len(session.distributed.tunnels) == 1
|
||||
|
|
|
@ -34,7 +34,7 @@ from core.api.grpc.wrappers import (
|
|||
from core.emane.models.ieee80211abg import EmaneIeee80211abgModel
|
||||
from core.emane.nodes import EmaneNet
|
||||
from core.emulator.data import EventData, IpPrefixes, NodeData, NodeOptions
|
||||
from core.emulator.enumerations import EventTypes, ExceptionLevels
|
||||
from core.emulator.enumerations import EventTypes, ExceptionLevels, MessageFlags
|
||||
from core.errors import CoreError
|
||||
from core.location.mobility import BasicRangeModel, Ns2ScriptedMobility
|
||||
from core.nodes.base import CoreNode
|
||||
|
@ -413,7 +413,7 @@ class TestGrpc:
|
|||
session = grpc_server.coreemu.create_session()
|
||||
switch = session.add_node(SwitchNode)
|
||||
node = session.add_node(CoreNode)
|
||||
assert len(switch.links()) == 0
|
||||
assert len(session.link_manager.links()) == 0
|
||||
iface = InterfaceHelper("10.0.0.0/24").create_iface(node.id, 0)
|
||||
link = Link(node.id, switch.id, iface1=iface)
|
||||
|
||||
|
@ -423,7 +423,7 @@ class TestGrpc:
|
|||
|
||||
# then
|
||||
assert result is True
|
||||
assert len(switch.links()) == 1
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert iface1.id == iface.id
|
||||
assert iface1.ip4 == iface.ip4
|
||||
|
||||
|
@ -445,11 +445,10 @@ class TestGrpc:
|
|||
session = grpc_server.coreemu.create_session()
|
||||
switch = session.add_node(SwitchNode)
|
||||
node = session.add_node(CoreNode)
|
||||
iface = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, switch.id, iface)
|
||||
iface_data = ip_prefixes.create_iface(node)
|
||||
iface, _ = session.add_link(node.id, switch.id, iface_data)
|
||||
options = LinkOptions(bandwidth=30000)
|
||||
link = switch.links()[0]
|
||||
assert options.bandwidth != link.options.bandwidth
|
||||
assert iface.options.bandwidth != options.bandwidth
|
||||
link = Link(node.id, switch.id, iface1=Interface(id=iface.id), options=options)
|
||||
|
||||
# then
|
||||
|
@ -458,8 +457,7 @@ class TestGrpc:
|
|||
|
||||
# then
|
||||
assert result is True
|
||||
link = switch.links()[0]
|
||||
assert options.bandwidth == link.options.bandwidth
|
||||
assert options.bandwidth == iface.options.bandwidth
|
||||
|
||||
def test_delete_link(self, grpc_server: CoreGrpcServer, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -470,13 +468,7 @@ class TestGrpc:
|
|||
node2 = session.add_node(CoreNode)
|
||||
iface2 = ip_prefixes.create_iface(node2)
|
||||
session.add_link(node1.id, node2.id, iface1, iface2)
|
||||
link_node = None
|
||||
for node_id in session.nodes:
|
||||
node = session.nodes[node_id]
|
||||
if node.id not in {node1.id, node2.id}:
|
||||
link_node = node
|
||||
break
|
||||
assert len(link_node.links()) == 1
|
||||
assert len(session.link_manager.links()) == 1
|
||||
link = Link(
|
||||
node1.id,
|
||||
node2.id,
|
||||
|
@ -490,7 +482,7 @@ class TestGrpc:
|
|||
|
||||
# then
|
||||
assert result is True
|
||||
assert len(link_node.links()) == 0
|
||||
assert len(session.link_manager.links()) == 0
|
||||
|
||||
def test_get_wlan_config(self, grpc_server: CoreGrpcServer):
|
||||
# given
|
||||
|
@ -755,9 +747,11 @@ class TestGrpc:
|
|||
session = grpc_server.coreemu.create_session()
|
||||
wlan = session.add_node(WlanNode)
|
||||
node = session.add_node(CoreNode)
|
||||
iface = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, wlan.id, iface)
|
||||
link_data = wlan.links()[0]
|
||||
iface_data = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, wlan.id, iface_data)
|
||||
core_link = list(session.link_manager.links())[0]
|
||||
link_data = core_link.get_data(MessageFlags.ADD)
|
||||
|
||||
queue = Queue()
|
||||
|
||||
def handle_event(event: Event) -> None:
|
||||
|
@ -932,3 +926,26 @@ class TestGrpc:
|
|||
with pytest.raises(grpc.RpcError):
|
||||
with client.context_connect():
|
||||
client.move_nodes(streamer)
|
||||
|
||||
def test_wlan_link(self, grpc_server: CoreGrpcServer, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
client = CoreGrpcClient()
|
||||
session = grpc_server.coreemu.create_session()
|
||||
wlan = session.add_node(WlanNode)
|
||||
node1 = session.add_node(CoreNode)
|
||||
node2 = session.add_node(CoreNode)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
session.add_link(node1.id, wlan.id, iface1_data)
|
||||
session.add_link(node2.id, wlan.id, iface2_data)
|
||||
session.instantiate()
|
||||
assert len(session.link_manager.links()) == 2
|
||||
|
||||
# when
|
||||
with client.context_connect():
|
||||
result1 = client.wlan_link(session.id, wlan.id, node1.id, node2.id, True)
|
||||
result2 = client.wlan_link(session.id, wlan.id, node1.id, node2.id, False)
|
||||
|
||||
# then
|
||||
assert result1 is True
|
||||
assert result2 is True
|
||||
|
|
|
@ -46,14 +46,17 @@ class TestLinks:
|
|||
)
|
||||
|
||||
# then
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
assert node2.get_iface(iface2_data.id)
|
||||
assert iface1 is not None
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
assert iface2 is not None
|
||||
assert iface1.local_options == LINK_OPTIONS
|
||||
assert iface1.has_local_netem
|
||||
assert iface2.local_options == LINK_OPTIONS
|
||||
assert iface2.has_local_netem
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
|
||||
def test_add_node_to_net(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -62,16 +65,20 @@ class TestLinks:
|
|||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
|
||||
# when
|
||||
iface, _ = session.add_link(
|
||||
iface1, iface2 = session.add_link(
|
||||
node1.id, node2.id, iface1_data=iface1_data, options=LINK_OPTIONS
|
||||
)
|
||||
|
||||
# then
|
||||
assert node2.links()
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert iface1 is not None
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
assert iface is not None
|
||||
assert iface.local_options == LINK_OPTIONS
|
||||
assert iface.has_local_netem
|
||||
assert iface2 is not None
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
assert node2.get_iface(iface1_data.id)
|
||||
|
||||
def test_add_net_to_node(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -80,32 +87,37 @@ class TestLinks:
|
|||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
|
||||
# when
|
||||
_, iface = session.add_link(
|
||||
iface1, iface2 = session.add_link(
|
||||
node1.id, node2.id, iface2_data=iface2_data, options=LINK_OPTIONS
|
||||
)
|
||||
|
||||
# then
|
||||
assert node1.links()
|
||||
assert node2.get_iface(iface2_data.id)
|
||||
assert iface is not None
|
||||
assert iface.local_options == LINK_OPTIONS
|
||||
assert iface.has_local_netem
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert iface1 is not None
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert iface2 is not None
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
def test_add_net_to_net(self, session):
|
||||
def test_add_net_to_net(self, session: Session):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
|
||||
# when
|
||||
iface, _ = session.add_link(node1.id, node2.id, options=LINK_OPTIONS)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, options=LINK_OPTIONS)
|
||||
|
||||
# then
|
||||
assert node1.links()
|
||||
assert iface is not None
|
||||
assert iface.local_options == LINK_OPTIONS
|
||||
assert iface.options == LINK_OPTIONS
|
||||
assert iface.has_local_netem
|
||||
assert iface.has_netem
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert iface1 is not None
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert iface2 is not None
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
|
||||
def test_add_node_to_node_uni(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -141,48 +153,52 @@ class TestLinks:
|
|||
)
|
||||
|
||||
# then
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
assert node2.get_iface(iface2_data.id)
|
||||
assert iface1 is not None
|
||||
assert iface1.options == link_options1
|
||||
assert iface1.has_netem
|
||||
assert iface2 is not None
|
||||
assert iface1.local_options == link_options1
|
||||
assert iface1.has_local_netem
|
||||
assert iface2.local_options == link_options2
|
||||
assert iface2.has_local_netem
|
||||
assert iface2.options == link_options2
|
||||
assert iface2.has_netem
|
||||
|
||||
def test_update_node_to_net(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(CoreNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface1, _ = session.add_link(node1.id, node2.id, iface1_data)
|
||||
assert iface1.local_options != LINK_OPTIONS
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert iface1.options != LINK_OPTIONS
|
||||
assert iface2.options != LINK_OPTIONS
|
||||
|
||||
# when
|
||||
session.update_link(
|
||||
node1.id, node2.id, iface1_id=iface1_data.id, options=LINK_OPTIONS
|
||||
)
|
||||
session.update_link(node1.id, node2.id, iface1.id, iface2.id, LINK_OPTIONS)
|
||||
|
||||
# then
|
||||
assert iface1.local_options == LINK_OPTIONS
|
||||
assert iface1.has_local_netem
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
|
||||
def test_update_net_to_node(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(CoreNode)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
_, iface2 = session.add_link(node1.id, node2.id, iface2_data=iface2_data)
|
||||
assert iface2.local_options != LINK_OPTIONS
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface2_data=iface2_data)
|
||||
assert iface1.options != LINK_OPTIONS
|
||||
assert iface2.options != LINK_OPTIONS
|
||||
|
||||
# when
|
||||
session.update_link(
|
||||
node1.id, node2.id, iface2_id=iface2_data.id, options=LINK_OPTIONS
|
||||
)
|
||||
session.update_link(node1.id, node2.id, iface1.id, iface2.id, LINK_OPTIONS)
|
||||
|
||||
# then
|
||||
assert iface2.local_options == LINK_OPTIONS
|
||||
assert iface2.has_local_netem
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
|
||||
def test_update_ptp(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -191,55 +207,68 @@ class TestLinks:
|
|||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
assert iface1.local_options != LINK_OPTIONS
|
||||
assert iface2.local_options != LINK_OPTIONS
|
||||
assert iface1.options != LINK_OPTIONS
|
||||
assert iface2.options != LINK_OPTIONS
|
||||
|
||||
# when
|
||||
session.update_link(
|
||||
node1.id, node2.id, iface1_data.id, iface2_data.id, LINK_OPTIONS
|
||||
)
|
||||
session.update_link(node1.id, node2.id, iface1.id, iface2.id, LINK_OPTIONS)
|
||||
|
||||
# then
|
||||
assert iface1.local_options == LINK_OPTIONS
|
||||
assert iface1.has_local_netem
|
||||
assert iface2.local_options == LINK_OPTIONS
|
||||
assert iface2.has_local_netem
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
|
||||
def test_update_net_to_net(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
iface1, _ = session.add_link(node1.id, node2.id)
|
||||
assert iface1.local_options != LINK_OPTIONS
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id)
|
||||
assert iface1.options != LINK_OPTIONS
|
||||
assert iface2.options != LINK_OPTIONS
|
||||
|
||||
# when
|
||||
session.update_link(node1.id, node2.id, options=LINK_OPTIONS)
|
||||
session.update_link(node1.id, node2.id, iface1.id, iface2.id, LINK_OPTIONS)
|
||||
|
||||
# then
|
||||
assert iface1.local_options == LINK_OPTIONS
|
||||
assert iface1.has_local_netem
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
|
||||
def test_update_error(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(CoreNode)
|
||||
node2 = session.add_node(CoreNode)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
assert iface1.options != LINK_OPTIONS
|
||||
assert iface2.options != LINK_OPTIONS
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(node1.id, INVALID_ID, iface1.id, iface2.id)
|
||||
|
||||
def test_clear_net_to_net(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
iface1, _ = session.add_link(node1.id, node2.id, options=LINK_OPTIONS)
|
||||
assert iface1.local_options == LINK_OPTIONS
|
||||
assert iface1.has_local_netem
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, options=LINK_OPTIONS)
|
||||
assert iface1.options == LINK_OPTIONS
|
||||
assert iface1.has_netem
|
||||
assert iface2.options == LINK_OPTIONS
|
||||
assert iface2.has_netem
|
||||
|
||||
# when
|
||||
options = LinkOptions(delay=0, bandwidth=0, loss=0.0, dup=0, jitter=0, buffer=0)
|
||||
session.update_link(node1.id, node2.id, options=options)
|
||||
session.update_link(node1.id, node2.id, iface1.id, iface2.id, options)
|
||||
|
||||
# then
|
||||
assert iface1.local_options.is_clear()
|
||||
assert not iface1.has_local_netem
|
||||
assert iface1.options.is_clear()
|
||||
assert not iface1.has_netem
|
||||
assert iface2.options.is_clear()
|
||||
assert not iface2.has_netem
|
||||
|
||||
def test_delete_node_to_node(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -247,82 +276,100 @@ class TestLinks:
|
|||
node2 = session.add_node(CoreNode)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
assert node2.get_iface(iface2_data.id)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
session.delete_link(node1.id, node2.id, iface1_data.id, iface2_data.id)
|
||||
session.delete_link(node1.id, node2.id, iface1.id, iface2.id)
|
||||
|
||||
# then
|
||||
assert iface1_data.id not in node1.ifaces
|
||||
assert iface2_data.id not in node2.ifaces
|
||||
assert len(session.link_manager.links()) == 0
|
||||
assert iface1.id not in node1.ifaces
|
||||
assert iface2.id not in node2.ifaces
|
||||
|
||||
def test_delete_node_to_net(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(CoreNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
session.add_link(node1.id, node2.id, iface1_data)
|
||||
assert node1.get_iface(iface1_data.id)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
session.delete_link(node1.id, node2.id, iface1_id=iface1_data.id)
|
||||
session.delete_link(node1.id, node2.id, iface1.id, iface2.id)
|
||||
|
||||
# then
|
||||
assert iface1_data.id not in node1.ifaces
|
||||
assert len(session.link_manager.links()) == 0
|
||||
assert iface1.id not in node1.ifaces
|
||||
assert iface2.id not in node2.ifaces
|
||||
|
||||
def test_delete_net_to_node(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(CoreNode)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
session.add_link(node1.id, node2.id, iface2_data=iface2_data)
|
||||
assert node2.get_iface(iface2_data.id)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface2_data=iface2_data)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
session.delete_link(node1.id, node2.id, iface2_id=iface2_data.id)
|
||||
session.delete_link(node1.id, node2.id, iface1.id, iface2.id)
|
||||
|
||||
# then
|
||||
assert iface2_data.id not in node2.ifaces
|
||||
assert len(session.link_manager.links()) == 0
|
||||
assert iface1.id not in node1.ifaces
|
||||
assert iface2.id not in node2.ifaces
|
||||
|
||||
def test_delete_net_to_net(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
session.add_link(node1.id, node2.id)
|
||||
assert node1.get_linked_iface(node2)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
session.delete_link(node1.id, node2.id)
|
||||
session.delete_link(node1.id, node2.id, iface1.id, iface2.id)
|
||||
|
||||
# then
|
||||
assert not node1.get_linked_iface(node2)
|
||||
assert len(session.link_manager.links()) == 0
|
||||
assert iface1.id not in node1.ifaces
|
||||
assert iface2.id not in node2.ifaces
|
||||
|
||||
def test_delete_node_error(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
session.add_link(node1.id, node2.id)
|
||||
assert node1.get_linked_iface(node2)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(node1.id, INVALID_ID)
|
||||
session.delete_link(node1.id, INVALID_ID, iface1.id, iface2.id)
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(INVALID_ID, node2.id)
|
||||
session.delete_link(INVALID_ID, node2.id, iface1.id, iface2.id)
|
||||
|
||||
def test_delete_net_to_net_error(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
node1 = session.add_node(SwitchNode)
|
||||
node2 = session.add_node(SwitchNode)
|
||||
node3 = session.add_node(SwitchNode)
|
||||
session.add_link(node1.id, node2.id)
|
||||
assert node1.get_linked_iface(node2)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(node1.id, node3.id)
|
||||
session.delete_link(node1.id, node3.id, iface1.id, iface2.id)
|
||||
|
||||
def test_delete_node_to_net_error(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -330,12 +377,14 @@ class TestLinks:
|
|||
node2 = session.add_node(SwitchNode)
|
||||
node3 = session.add_node(SwitchNode)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface1, _ = session.add_link(node1.id, node2.id, iface1_data)
|
||||
assert iface1
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(node1.id, node3.id)
|
||||
session.delete_link(node1.id, node3.id, iface1.id, iface2.id)
|
||||
|
||||
def test_delete_net_to_node_error(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -343,12 +392,14 @@ class TestLinks:
|
|||
node2 = session.add_node(CoreNode)
|
||||
node3 = session.add_node(SwitchNode)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
_, iface2 = session.add_link(node1.id, node2.id, iface2_data=iface2_data)
|
||||
assert iface2
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface2_data=iface2_data)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(node1.id, node3.id)
|
||||
session.delete_link(node1.id, node3.id, iface1.id, iface2.id)
|
||||
|
||||
def test_delete_node_to_node_error(self, session: Session, ip_prefixes: IpPrefixes):
|
||||
# given
|
||||
|
@ -358,9 +409,10 @@ class TestLinks:
|
|||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
iface1, iface2 = session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
assert iface1
|
||||
assert iface2
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert node1.get_iface(iface1.id)
|
||||
assert node2.get_iface(iface2.id)
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
session.delete_link(node1.id, node3.id)
|
||||
session.delete_link(node1.id, node3.id, iface1.id, iface2.id)
|
||||
|
|
|
@ -60,6 +60,40 @@ class TestNodes:
|
|||
with pytest.raises(CoreError):
|
||||
session.get_node(node.id, CoreNode)
|
||||
|
||||
def test_node_add_iface(self, session: Session):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
|
||||
# when
|
||||
iface = node.create_iface()
|
||||
|
||||
# then
|
||||
assert iface.id in node.ifaces
|
||||
|
||||
def test_node_get_iface(self, session: Session):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
iface = node.create_iface()
|
||||
assert iface.id in node.ifaces
|
||||
|
||||
# when
|
||||
iface2 = node.get_iface(iface.id)
|
||||
|
||||
# then
|
||||
assert iface == iface2
|
||||
|
||||
def test_node_delete_iface(self, session: Session):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
iface = node.create_iface()
|
||||
assert iface.id in node.ifaces
|
||||
|
||||
# when
|
||||
node.delete_iface(iface.id)
|
||||
|
||||
# then
|
||||
assert iface.id not in node.ifaces
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"mac,expected",
|
||||
[
|
||||
|
@ -70,12 +104,11 @@ class TestNodes:
|
|||
def test_node_set_mac(self, session: Session, mac: str, expected: str):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
switch = session.add_node(SwitchNode)
|
||||
iface_data = InterfaceData()
|
||||
iface = node.new_iface(switch, iface_data)
|
||||
iface = node.create_iface(iface_data)
|
||||
|
||||
# when
|
||||
node.set_mac(iface.node_id, mac)
|
||||
iface.set_mac(mac)
|
||||
|
||||
# then
|
||||
assert str(iface.mac) == expected
|
||||
|
@ -86,13 +119,12 @@ class TestNodes:
|
|||
def test_node_set_mac_exception(self, session: Session, mac: str):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
switch = session.add_node(SwitchNode)
|
||||
iface_data = InterfaceData()
|
||||
iface = node.new_iface(switch, iface_data)
|
||||
iface = node.create_iface(iface_data)
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
node.set_mac(iface.node_id, mac)
|
||||
iface.set_mac(mac)
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"ip,expected,is_ip6",
|
||||
|
@ -106,12 +138,11 @@ class TestNodes:
|
|||
def test_node_add_ip(self, session: Session, ip: str, expected: str, is_ip6: bool):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
switch = session.add_node(SwitchNode)
|
||||
iface_data = InterfaceData()
|
||||
iface = node.new_iface(switch, iface_data)
|
||||
iface = node.create_iface(iface_data)
|
||||
|
||||
# when
|
||||
node.add_ip(iface.node_id, ip)
|
||||
iface.add_ip(ip)
|
||||
|
||||
# then
|
||||
if is_ip6:
|
||||
|
@ -122,14 +153,13 @@ class TestNodes:
|
|||
def test_node_add_ip_exception(self, session):
|
||||
# given
|
||||
node = session.add_node(CoreNode)
|
||||
switch = session.add_node(SwitchNode)
|
||||
iface_data = InterfaceData()
|
||||
iface = node.new_iface(switch, iface_data)
|
||||
iface = node.create_iface(iface_data)
|
||||
ip = "256.168.0.1/24"
|
||||
|
||||
# when
|
||||
with pytest.raises(CoreError):
|
||||
node.add_ip(iface.node_id, ip)
|
||||
iface.add_ip(ip)
|
||||
|
||||
@pytest.mark.parametrize("net_type", NET_TYPES)
|
||||
def test_net(self, session, net_type):
|
||||
|
|
|
@ -10,7 +10,7 @@ from core.emulator.session import Session
|
|||
from core.errors import CoreError
|
||||
from core.location.mobility import BasicRangeModel
|
||||
from core.nodes.base import CoreNode
|
||||
from core.nodes.network import PtpNet, SwitchNode, WlanNode
|
||||
from core.nodes.network import SwitchNode, WlanNode
|
||||
from core.services.utility import SshService
|
||||
|
||||
|
||||
|
@ -65,25 +65,18 @@ class TestXml:
|
|||
:param tmpdir: tmpdir to create data in
|
||||
:param ip_prefixes: generates ip addresses for nodes
|
||||
"""
|
||||
# create ptp
|
||||
ptp_node = session.add_node(PtpNet)
|
||||
|
||||
# create nodes
|
||||
node1 = session.add_node(CoreNode)
|
||||
node2 = session.add_node(CoreNode)
|
||||
|
||||
# link nodes to ptp net
|
||||
for node in [node1, node2]:
|
||||
iface_data = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, ptp_node.id, iface1_data=iface_data)
|
||||
# link nodes
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
|
||||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
node1_id = node1.id
|
||||
node2_id = node2.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -98,16 +91,19 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, CoreNode)
|
||||
assert not session.get_node(node1.id, CoreNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, CoreNode)
|
||||
assert not session.get_node(node2.id, CoreNode)
|
||||
# verify no links are known
|
||||
assert len(session.link_manager.links()) == 0
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# verify nodes have been recreated
|
||||
assert session.get_node(node1_id, CoreNode)
|
||||
assert session.get_node(node2_id, CoreNode)
|
||||
assert session.get_node(node1.id, CoreNode)
|
||||
assert session.get_node(node2.id, CoreNode)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
|
||||
def test_xml_ptp_services(
|
||||
self, session: Session, tmpdir: TemporaryFile, ip_prefixes: IpPrefixes
|
||||
|
@ -119,18 +115,15 @@ class TestXml:
|
|||
:param tmpdir: tmpdir to create data in
|
||||
:param ip_prefixes: generates ip addresses for nodes
|
||||
"""
|
||||
# create ptp
|
||||
ptp_node = session.add_node(PtpNet)
|
||||
|
||||
# create nodes
|
||||
options = NodeOptions(model="host")
|
||||
node1 = session.add_node(CoreNode, options=options)
|
||||
node2 = session.add_node(CoreNode)
|
||||
|
||||
# link nodes to ptp net
|
||||
for node in [node1, node2]:
|
||||
iface_data = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, ptp_node.id, iface1_data=iface_data)
|
||||
iface1_data = ip_prefixes.create_iface(node1)
|
||||
iface2_data = ip_prefixes.create_iface(node2)
|
||||
session.add_link(node1.id, node2.id, iface1_data, iface2_data)
|
||||
|
||||
# set custom values for node service
|
||||
session.services.set_service(node1.id, SshService.name)
|
||||
|
@ -143,10 +136,6 @@ class TestXml:
|
|||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
node1_id = node1.id
|
||||
node2_id = node2.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -161,9 +150,9 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, CoreNode)
|
||||
assert not session.get_node(node1.id, CoreNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, CoreNode)
|
||||
assert not session.get_node(node2.id, CoreNode)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
@ -172,8 +161,8 @@ class TestXml:
|
|||
service = session.services.get_service(node1.id, SshService.name)
|
||||
|
||||
# verify nodes have been recreated
|
||||
assert session.get_node(node1_id, CoreNode)
|
||||
assert session.get_node(node2_id, CoreNode)
|
||||
assert session.get_node(node1.id, CoreNode)
|
||||
assert session.get_node(node2.id, CoreNode)
|
||||
assert service.config_data.get(service_file) == file_data
|
||||
|
||||
def test_xml_mobility(
|
||||
|
@ -187,8 +176,8 @@ class TestXml:
|
|||
:param ip_prefixes: generates ip addresses for nodes
|
||||
"""
|
||||
# create wlan
|
||||
wlan_node = session.add_node(WlanNode)
|
||||
session.mobility.set_model(wlan_node, BasicRangeModel, {"test": "1"})
|
||||
wlan = session.add_node(WlanNode)
|
||||
session.mobility.set_model(wlan, BasicRangeModel, {"test": "1"})
|
||||
|
||||
# create nodes
|
||||
options = NodeOptions(model="mdr")
|
||||
|
@ -199,16 +188,11 @@ class TestXml:
|
|||
# link nodes
|
||||
for node in [node1, node2]:
|
||||
iface_data = ip_prefixes.create_iface(node)
|
||||
session.add_link(node.id, wlan_node.id, iface1_data=iface_data)
|
||||
session.add_link(node.id, wlan.id, iface1_data=iface_data)
|
||||
|
||||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
wlan_id = wlan_node.id
|
||||
node1_id = node1.id
|
||||
node2_id = node2.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -223,20 +207,20 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, CoreNode)
|
||||
assert not session.get_node(node1.id, CoreNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, CoreNode)
|
||||
assert not session.get_node(node2.id, CoreNode)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# retrieve configuration we set originally
|
||||
value = str(session.mobility.get_config("test", wlan_id, BasicRangeModel.name))
|
||||
value = str(session.mobility.get_config("test", wlan.id, BasicRangeModel.name))
|
||||
|
||||
# verify nodes and configuration were restored
|
||||
assert session.get_node(node1_id, CoreNode)
|
||||
assert session.get_node(node2_id, CoreNode)
|
||||
assert session.get_node(wlan_id, WlanNode)
|
||||
assert session.get_node(node1.id, CoreNode)
|
||||
assert session.get_node(node2.id, CoreNode)
|
||||
assert session.get_node(wlan.id, WlanNode)
|
||||
assert value == "1"
|
||||
|
||||
def test_network_to_network(self, session: Session, tmpdir: TemporaryFile):
|
||||
|
@ -256,10 +240,6 @@ class TestXml:
|
|||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
node1_id = switch1.id
|
||||
node2_id = switch2.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -274,19 +254,19 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, SwitchNode)
|
||||
assert not session.get_node(switch1.id, SwitchNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, SwitchNode)
|
||||
assert not session.get_node(switch2.id, SwitchNode)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# verify nodes have been recreated
|
||||
switch1 = session.get_node(node1_id, SwitchNode)
|
||||
switch2 = session.get_node(node2_id, SwitchNode)
|
||||
switch1 = session.get_node(switch1.id, SwitchNode)
|
||||
switch2 = session.get_node(switch2.id, SwitchNode)
|
||||
assert switch1
|
||||
assert switch2
|
||||
assert len(switch1.links() + switch2.links()) == 1
|
||||
assert len(session.link_manager.links()) == 1
|
||||
|
||||
def test_link_options(
|
||||
self, session: Session, tmpdir: TemporaryFile, ip_prefixes: IpPrefixes
|
||||
|
@ -316,10 +296,6 @@ class TestXml:
|
|||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
node1_id = node1.id
|
||||
node2_id = switch.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -334,27 +310,25 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, CoreNode)
|
||||
assert not session.get_node(node1.id, CoreNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, SwitchNode)
|
||||
assert not session.get_node(switch.id, SwitchNode)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# verify nodes have been recreated
|
||||
assert session.get_node(node1_id, CoreNode)
|
||||
assert session.get_node(node2_id, SwitchNode)
|
||||
links = []
|
||||
for node_id in session.nodes:
|
||||
node = session.nodes[node_id]
|
||||
links += node.links()
|
||||
link = links[0]
|
||||
assert options.loss == link.options.loss
|
||||
assert options.bandwidth == link.options.bandwidth
|
||||
assert options.jitter == link.options.jitter
|
||||
assert options.delay == link.options.delay
|
||||
assert options.dup == link.options.dup
|
||||
assert options.buffer == link.options.buffer
|
||||
assert session.get_node(node1.id, CoreNode)
|
||||
assert session.get_node(switch.id, SwitchNode)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
link = list(session.link_manager.links())[0]
|
||||
link_options = link.options()
|
||||
assert options.loss == link_options.loss
|
||||
assert options.bandwidth == link_options.bandwidth
|
||||
assert options.jitter == link_options.jitter
|
||||
assert options.delay == link_options.delay
|
||||
assert options.dup == link_options.dup
|
||||
assert options.buffer == link_options.buffer
|
||||
|
||||
def test_link_options_ptp(
|
||||
self, session: Session, tmpdir: TemporaryFile, ip_prefixes: IpPrefixes
|
||||
|
@ -385,10 +359,6 @@ class TestXml:
|
|||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
node1_id = node1.id
|
||||
node2_id = node2.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -403,27 +373,25 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, CoreNode)
|
||||
assert not session.get_node(node1.id, CoreNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, CoreNode)
|
||||
assert not session.get_node(node2.id, CoreNode)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# verify nodes have been recreated
|
||||
assert session.get_node(node1_id, CoreNode)
|
||||
assert session.get_node(node2_id, CoreNode)
|
||||
links = []
|
||||
for node_id in session.nodes:
|
||||
node = session.nodes[node_id]
|
||||
links += node.links()
|
||||
link = links[0]
|
||||
assert options.loss == link.options.loss
|
||||
assert options.bandwidth == link.options.bandwidth
|
||||
assert options.jitter == link.options.jitter
|
||||
assert options.delay == link.options.delay
|
||||
assert options.dup == link.options.dup
|
||||
assert options.buffer == link.options.buffer
|
||||
assert session.get_node(node1.id, CoreNode)
|
||||
assert session.get_node(node2.id, CoreNode)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
link = list(session.link_manager.links())[0]
|
||||
link_options = link.options()
|
||||
assert options.loss == link_options.loss
|
||||
assert options.bandwidth == link_options.bandwidth
|
||||
assert options.jitter == link_options.jitter
|
||||
assert options.delay == link_options.delay
|
||||
assert options.dup == link_options.dup
|
||||
assert options.buffer == link_options.buffer
|
||||
|
||||
def test_link_options_bidirectional(
|
||||
self, session: Session, tmpdir: TemporaryFile, ip_prefixes: IpPrefixes
|
||||
|
@ -450,7 +418,9 @@ class TestXml:
|
|||
options1.dup = 5
|
||||
options1.jitter = 5
|
||||
options1.buffer = 50
|
||||
session.add_link(node1.id, node2.id, iface1_data, iface2_data, options1)
|
||||
iface1, iface2 = session.add_link(
|
||||
node1.id, node2.id, iface1_data, iface2_data, options1
|
||||
)
|
||||
options2 = LinkOptions()
|
||||
options2.unidirectional = 1
|
||||
options2.bandwidth = 10000
|
||||
|
@ -459,17 +429,11 @@ class TestXml:
|
|||
options2.dup = 10
|
||||
options2.jitter = 10
|
||||
options2.buffer = 100
|
||||
session.update_link(
|
||||
node2.id, node1.id, iface2_data.id, iface1_data.id, options2
|
||||
)
|
||||
session.update_link(node2.id, node1.id, iface2.id, iface1.id, options2)
|
||||
|
||||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
node1_id = node1.id
|
||||
node2_id = node2.id
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = Path(xml_file.strpath)
|
||||
|
@ -484,32 +448,26 @@ class TestXml:
|
|||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node1_id, CoreNode)
|
||||
assert not session.get_node(node1.id, CoreNode)
|
||||
with pytest.raises(CoreError):
|
||||
assert not session.get_node(node2_id, CoreNode)
|
||||
assert not session.get_node(node2.id, CoreNode)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# verify nodes have been recreated
|
||||
assert session.get_node(node1_id, CoreNode)
|
||||
assert session.get_node(node2_id, CoreNode)
|
||||
links = []
|
||||
for node_id in session.nodes:
|
||||
node = session.nodes[node_id]
|
||||
links += node.links()
|
||||
assert len(links) == 2
|
||||
link1 = links[0]
|
||||
link2 = links[1]
|
||||
assert options1.bandwidth == link1.options.bandwidth
|
||||
assert options1.delay == link1.options.delay
|
||||
assert options1.loss == link1.options.loss
|
||||
assert options1.dup == link1.options.dup
|
||||
assert options1.jitter == link1.options.jitter
|
||||
assert options1.buffer == link1.options.buffer
|
||||
assert options2.bandwidth == link2.options.bandwidth
|
||||
assert options2.delay == link2.options.delay
|
||||
assert options2.loss == link2.options.loss
|
||||
assert options2.dup == link2.options.dup
|
||||
assert options2.jitter == link2.options.jitter
|
||||
assert options2.buffer == link2.options.buffer
|
||||
assert session.get_node(node1.id, CoreNode)
|
||||
assert session.get_node(node2.id, CoreNode)
|
||||
assert len(session.link_manager.links()) == 1
|
||||
assert options1.bandwidth == iface1.options.bandwidth
|
||||
assert options1.delay == iface1.options.delay
|
||||
assert options1.loss == iface1.options.loss
|
||||
assert options1.dup == iface1.options.dup
|
||||
assert options1.jitter == iface1.options.jitter
|
||||
assert options1.buffer == iface1.options.buffer
|
||||
assert options2.bandwidth == iface2.options.bandwidth
|
||||
assert options2.delay == iface2.options.delay
|
||||
assert options2.loss == iface2.options.loss
|
||||
assert options2.dup == iface2.options.dup
|
||||
assert options2.jitter == iface2.options.jitter
|
||||
assert options2.buffer == iface2.options.buffer
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue