changes to support better type checking for retrieving an arbitrary node from a session, get_node now requires an expected class that the node would be an instance of, if the returned node is not an instance a CoreError is thrown, this also helps editors pick up expected types to account for variable/function usage better as well

This commit is contained in:
Blake Harnden 2020-05-20 14:44:34 -07:00
parent 19ee367dc5
commit d5254e6a91
21 changed files with 149 additions and 126 deletions

View file

@ -9,11 +9,13 @@ import pytest
from core.emane.bypass import EmaneBypassModel
from core.emane.commeffect import EmaneCommEffectModel
from core.emane.ieee80211abg import EmaneIeee80211abgModel
from core.emane.nodes import EmaneNet
from core.emane.rfpipe import EmaneRfPipeModel
from core.emane.tdma import EmaneTdmaModel
from core.emulator.emudata import NodeOptions
from core.emulator.enumerations import NodeTypes
from core.errors import CoreCommandError, CoreError
from core.nodes.base import CoreNode
_EMANE_MODELS = [
EmaneIeee80211abgModel,
@ -133,9 +135,9 @@ class TestEmane:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, CoreNode)
# load saved xml
session.open_xml(file_path, start=True)
@ -146,7 +148,7 @@ class TestEmane:
)
# verify nodes and configuration were restored
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(emane_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, CoreNode)
assert session.get_node(emane_id, EmaneNet)
assert value == config_value

View file

@ -19,6 +19,7 @@ from core.emulator.emudata import NodeOptions
from core.emulator.enumerations import EventTypes, ExceptionLevels, NodeTypes
from core.errors import CoreError
from core.location.mobility import BasicRangeModel, Ns2ScriptedMobility
from core.nodes.base import CoreNode
from core.xml.corexml import CoreXmlWriter
@ -355,7 +356,7 @@ class TestGrpc:
# then
assert response.node_id is not None
assert session.get_node(response.node_id) is not None
assert session.get_node(response.node_id, CoreNode) is not None
def test_get_node(self, grpc_server):
# given
@ -402,7 +403,7 @@ class TestGrpc:
assert response.result is expected
if expected is True:
with pytest.raises(CoreError):
assert session.get_node(node.id)
assert session.get_node(node.id, CoreNode)
def test_node_command(self, request, grpc_server):
if request.config.getoption("mock"):

View file

@ -24,6 +24,8 @@ from core.emane.ieee80211abg import EmaneIeee80211abgModel
from core.emulator.enumerations import EventTypes, MessageFlags, NodeTypes, RegisterTlvs
from core.errors import CoreError
from core.location.mobility import BasicRangeModel
from core.nodes.base import CoreNode, NodeBase
from core.nodes.network import SwitchNode
def dict_to_str(values):
@ -57,8 +59,7 @@ class TestGui:
)
coretlv.handle_message(message)
assert coretlv.session.get_node(node_id) is not None
assert coretlv.session.get_node(node_id, NodeBase) is not None
def test_node_update(self, coretlv):
node_id = 1
@ -76,7 +77,7 @@ class TestGui:
coretlv.handle_message(message)
node = coretlv.session.get_node(node_id)
node = coretlv.session.get_node(node_id, NodeBase)
assert node is not None
assert node.position.x == x
assert node.position.y == y
@ -91,7 +92,7 @@ class TestGui:
coretlv.handle_message(message)
with pytest.raises(CoreError):
coretlv.session.get_node(node_id)
coretlv.session.get_node(node_id, NodeBase)
def test_link_add_node_to_net(self, coretlv):
node_one = 1
@ -113,7 +114,7 @@ class TestGui:
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 1
@ -137,7 +138,7 @@ class TestGui:
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 1
@ -189,7 +190,7 @@ class TestGui:
],
)
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 1
link = all_links[0]
@ -207,7 +208,7 @@ class TestGui:
)
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 1
link = all_links[0]
@ -275,7 +276,7 @@ class TestGui:
],
)
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 1
@ -289,7 +290,7 @@ class TestGui:
)
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 0
@ -311,7 +312,7 @@ class TestGui:
],
)
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 1
@ -325,7 +326,7 @@ class TestGui:
)
coretlv.handle_message(message)
switch_node = coretlv.session.get_node(switch)
switch_node = coretlv.session.get_node(switch, SwitchNode)
all_links = switch_node.all_link_data()
assert len(all_links) == 0
@ -556,8 +557,7 @@ class TestGui:
)
coretlv.handle_message(message)
assert coretlv.session.get_node(node.id)
assert coretlv.session.get_node(node.id, NodeBase)
@pytest.mark.parametrize(
"state",
@ -619,7 +619,7 @@ class TestGui:
coretlv.handle_message(message)
assert coretlv.coreemu.sessions[1].get_node(node.id)
assert coretlv.coreemu.sessions[1].get_node(node.id, CoreNode)
def test_register_python(self, coretlv, tmpdir):
xml_file = tmpdir.join("test.py")

View file

@ -3,6 +3,7 @@ import pytest
from core.emulator.emudata import NodeOptions
from core.emulator.enumerations import NodeTypes
from core.errors import CoreError
from core.nodes.base import CoreNode
MODELS = ["router", "host", "PC", "mdr"]
NET_TYPES = [NodeTypes.SWITCH, NodeTypes.HUB, NodeTypes.WIRELESS_LAN]
@ -45,7 +46,7 @@ class TestNodes:
# then
with pytest.raises(CoreError):
session.get_node(node.id)
session.get_node(node.id, CoreNode)
def test_node_sethwaddr(self, session):
# given

View file

@ -6,6 +6,8 @@ from core.emulator.emudata import LinkOptions, NodeOptions
from core.emulator.enumerations import EventTypes, NodeTypes
from core.errors import CoreError
from core.location.mobility import BasicRangeModel
from core.nodes.base import CoreNode
from core.nodes.network import SwitchNode, WlanNode
from core.services.utility import SshService
@ -91,16 +93,16 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, CoreNode)
# load saved xml
session.open_xml(file_path, start=True)
# verify nodes have been recreated
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, CoreNode)
def test_xml_ptp_services(self, session, tmpdir, ip_prefixes):
"""
@ -152,9 +154,9 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, CoreNode)
# load saved xml
session.open_xml(file_path, start=True)
@ -163,8 +165,8 @@ class TestXml:
service = session.services.get_service(node_one.id, SshService.name)
# verify nodes have been recreated
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, CoreNode)
assert service.config_data.get(service_file) == file_data
def test_xml_mobility(self, session, tmpdir, ip_prefixes):
@ -212,9 +214,9 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, CoreNode)
# load saved xml
session.open_xml(file_path, start=True)
@ -223,9 +225,9 @@ class TestXml:
value = str(session.mobility.get_config("test", wlan_id, BasicRangeModel.name))
# verify nodes and configuration were restored
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(wlan_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, CoreNode)
assert session.get_node(wlan_id, WlanNode)
assert value == "1"
def test_network_to_network(self, session, tmpdir):
@ -263,16 +265,16 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, SwitchNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, SwitchNode)
# load saved xml
session.open_xml(file_path, start=True)
# verify nodes have been recreated
switch_one = session.get_node(n1_id)
switch_two = session.get_node(n2_id)
switch_one = session.get_node(n1_id, SwitchNode)
switch_two = session.get_node(n2_id, SwitchNode)
assert switch_one
assert switch_two
assert len(switch_one.all_link_data() + switch_two.all_link_data()) == 1
@ -322,16 +324,16 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, SwitchNode)
# load saved xml
session.open_xml(file_path, start=True)
# verify nodes have been recreated
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, SwitchNode)
links = []
for node_id in session.nodes:
node = session.nodes[node_id]
@ -389,16 +391,16 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, CoreNode)
# load saved xml
session.open_xml(file_path, start=True)
# verify nodes have been recreated
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, CoreNode)
links = []
for node_id in session.nodes:
node = session.nodes[node_id]
@ -471,16 +473,16 @@ class TestXml:
# verify nodes have been removed from session
with pytest.raises(CoreError):
assert not session.get_node(n1_id)
assert not session.get_node(n1_id, CoreNode)
with pytest.raises(CoreError):
assert not session.get_node(n2_id)
assert not session.get_node(n2_id, CoreNode)
# load saved xml
session.open_xml(file_path, start=True)
# verify nodes have been recreated
assert session.get_node(n1_id)
assert session.get_node(n2_id)
assert session.get_node(n1_id, CoreNode)
assert session.get_node(n2_id, CoreNode)
links = []
for node_id in session.nodes:
node = session.nodes[node_id]