2018-04-25 16:33:58 -07:00
|
|
|
import pytest
|
2019-09-10 21:33:35 -07:00
|
|
|
|
2020-06-16 12:50:24 -07:00
|
|
|
from core.emulator.data import InterfaceData, NodeOptions
|
2020-05-24 23:37:38 -07:00
|
|
|
from core.emulator.session import Session
|
2019-09-27 23:29:15 -07:00
|
|
|
from core.errors import CoreError
|
2020-05-20 14:44:34 -07:00
|
|
|
from core.nodes.base import CoreNode
|
2020-05-20 22:14:03 -07:00
|
|
|
from core.nodes.network import HubNode, SwitchNode, WlanNode
|
2018-04-25 16:33:58 -07:00
|
|
|
|
2019-09-10 15:10:24 -07:00
|
|
|
MODELS = ["router", "host", "PC", "mdr"]
|
2020-05-20 22:14:03 -07:00
|
|
|
NET_TYPES = [SwitchNode, HubNode, WlanNode]
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
|
|
|
|
class TestNodes:
|
|
|
|
@pytest.mark.parametrize("model", MODELS)
|
2020-05-24 23:37:38 -07:00
|
|
|
def test_node_add(self, session: Session, model: str):
|
2018-04-25 16:33:58 -07:00
|
|
|
# given
|
2019-10-22 15:31:50 -07:00
|
|
|
options = NodeOptions(model=model)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
# when
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode, options=options)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
# then
|
|
|
|
assert node
|
|
|
|
assert node.alive()
|
|
|
|
assert node.up
|
|
|
|
|
2020-05-24 23:37:38 -07:00
|
|
|
def test_node_update(self, session: Session):
|
2018-04-25 16:33:58 -07:00
|
|
|
# given
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode)
|
2018-04-25 16:33:58 -07:00
|
|
|
position_value = 100
|
|
|
|
update_options = NodeOptions()
|
|
|
|
update_options.set_position(x=position_value, y=position_value)
|
|
|
|
|
|
|
|
# when
|
2019-10-22 20:55:06 -07:00
|
|
|
session.edit_node(node.id, update_options)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
# then
|
|
|
|
assert node.position.x == position_value
|
|
|
|
assert node.position.y == position_value
|
|
|
|
|
2020-05-24 23:37:38 -07:00
|
|
|
def test_node_delete(self, session: Session):
|
2018-04-25 16:33:58 -07:00
|
|
|
# given
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
# when
|
2019-04-26 22:07:51 -07:00
|
|
|
session.delete_node(node.id)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
# then
|
2019-09-11 13:12:42 -07:00
|
|
|
with pytest.raises(CoreError):
|
2020-05-20 14:44:34 -07:00
|
|
|
session.get_node(node.id, CoreNode)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
2020-06-16 23:25:26 -07:00
|
|
|
def test_node_set_mac(self, session: Session):
|
2020-01-09 14:23:08 -08:00
|
|
|
# given
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode)
|
2020-06-09 12:42:15 -07:00
|
|
|
switch = session.add_node(SwitchNode)
|
2020-06-16 09:30:16 -07:00
|
|
|
iface_data = InterfaceData()
|
|
|
|
iface = node.new_iface(switch, iface_data)
|
2020-01-09 14:23:08 -08:00
|
|
|
mac = "aa:aa:aa:ff:ff:ff"
|
|
|
|
|
|
|
|
# when
|
2020-06-16 23:25:26 -07:00
|
|
|
node.set_mac(iface.node_id, mac)
|
2020-01-09 14:23:08 -08:00
|
|
|
|
|
|
|
# then
|
2020-06-16 23:25:26 -07:00
|
|
|
assert iface.mac == mac
|
2020-01-09 14:23:08 -08:00
|
|
|
|
2020-06-16 23:25:26 -07:00
|
|
|
def test_node_set_mac_exception(self, session: Session):
|
2020-01-09 14:23:08 -08:00
|
|
|
# given
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode)
|
2020-06-09 12:42:15 -07:00
|
|
|
switch = session.add_node(SwitchNode)
|
2020-06-16 09:30:16 -07:00
|
|
|
iface_data = InterfaceData()
|
|
|
|
iface = node.new_iface(switch, iface_data)
|
2020-01-09 14:23:08 -08:00
|
|
|
mac = "aa:aa:aa:ff:ff:fff"
|
|
|
|
|
|
|
|
# when
|
|
|
|
with pytest.raises(CoreError):
|
2020-06-16 23:25:26 -07:00
|
|
|
node.set_mac(iface.node_id, mac)
|
2020-01-09 14:23:08 -08:00
|
|
|
|
2020-06-19 10:54:58 -07:00
|
|
|
def test_node_add_ip(self, session: Session):
|
2020-01-09 14:23:08 -08:00
|
|
|
# given
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode)
|
2020-06-09 12:42:15 -07:00
|
|
|
switch = session.add_node(SwitchNode)
|
2020-06-16 09:30:16 -07:00
|
|
|
iface_data = InterfaceData()
|
|
|
|
iface = node.new_iface(switch, iface_data)
|
2020-06-19 10:54:58 -07:00
|
|
|
ip = "192.168.0.1/24"
|
2020-01-09 14:23:08 -08:00
|
|
|
|
|
|
|
# when
|
2020-06-19 10:54:58 -07:00
|
|
|
node.add_ip(iface.node_id, ip)
|
2020-01-09 14:23:08 -08:00
|
|
|
|
|
|
|
# then
|
2020-06-19 10:54:58 -07:00
|
|
|
assert str(iface.get_ip4()) == ip
|
2020-01-09 14:23:08 -08:00
|
|
|
|
2020-06-19 10:54:58 -07:00
|
|
|
def test_node_add_ip_exception(self, session):
|
2020-01-09 14:23:08 -08:00
|
|
|
# given
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(CoreNode)
|
2020-06-09 12:42:15 -07:00
|
|
|
switch = session.add_node(SwitchNode)
|
2020-06-16 09:30:16 -07:00
|
|
|
iface_data = InterfaceData()
|
|
|
|
iface = node.new_iface(switch, iface_data)
|
2020-06-19 10:54:58 -07:00
|
|
|
ip = "256.168.0.1/24"
|
2020-01-09 14:23:08 -08:00
|
|
|
|
|
|
|
# when
|
|
|
|
with pytest.raises(CoreError):
|
2020-06-19 10:54:58 -07:00
|
|
|
node.add_ip(iface.node_id, ip)
|
2020-01-09 14:23:08 -08:00
|
|
|
|
2018-04-25 16:33:58 -07:00
|
|
|
@pytest.mark.parametrize("net_type", NET_TYPES)
|
|
|
|
def test_net(self, session, net_type):
|
|
|
|
# given
|
|
|
|
|
|
|
|
# when
|
2020-05-20 22:14:03 -07:00
|
|
|
node = session.add_node(net_type)
|
2018-04-25 16:33:58 -07:00
|
|
|
|
|
|
|
# then
|
|
|
|
assert node
|
|
|
|
assert node.up
|