1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-15 22:12:58 +01:00
RIOT/dist/pythonlibs/riotctrl_shell/tests/test_netif.py

294 lines
9.5 KiB
Python
Raw Normal View History

# Copyright (C) 2020 Freie Universität Berlin
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
import pytest
import riotctrl_shell.netif
from .common import init_ctrl
def test_ifconfig_stats_parser():
cmd_output = """
Statistics for Layer 2
RX packets 4 bytes 400
TX packets 1 (Multicast: 1) bytes 78
TX succeeded 1 errors 0
Statistics for IPv6
RX packets 4 bytes 344
TX packets 1 (Multicast: 1) bytes 64
TX succeeded 1 errors 0"""
parser = riotctrl_shell.netif.IfconfigStatsParser()
res = parser.parse(cmd_output)
assert len(res) == 2
assert res["Layer 2"]["rx"]["packets"] == 4
assert res["Layer 2"]["rx"]["bytes"] == 400
assert res["Layer 2"]["tx"]["packets"] == 1
assert res["Layer 2"]["tx"]["multicast"] == 1
assert res["Layer 2"]["tx"]["bytes"] == 78
assert res["Layer 2"]["tx"]["succeeded"] == 1
assert res["Layer 2"]["tx"]["errors"] == 0
assert res["IPv6"]["rx"]["packets"] == 4
assert res["IPv6"]["rx"]["bytes"] == 344
assert res["IPv6"]["tx"]["packets"] == 1
assert res["IPv6"]["tx"]["multicast"] == 1
assert res["IPv6"]["tx"]["bytes"] == 64
assert res["IPv6"]["tx"]["succeeded"] == 1
assert res["IPv6"]["tx"]["errors"] == 0
@pytest.mark.parametrize(
"args,expected",
[((), "ifconfig"), (("foobar",), "ifconfig foobar")]
)
def test_ifconfig_list(args, expected):
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_list(*args)
# mock just returns last input
assert res == expected
@pytest.mark.parametrize(
"args,expected",
[((), "ifconfig"), (("foobar",), "ifconfig foobar")]
)
def test_ifconfig_cmd_empty(args, expected):
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_cmd(*args)
assert res == expected
def test_ifconfig_cmd_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(ValueError):
si.ifconfig_cmd(args=("test", "12345"))
def test_ifconfig_help():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_help("foobar")
assert res == "ifconfig foobar help"
@pytest.mark.parametrize(
"option,value,expected",
[("addr", "42:de:ad:c0:ff:ee",
"ifconfig foobar set addr 42:de:ad:c0:ff:ee"),
("chan", 17, "ifconfig foobar set chan 17")]
)
def test_ifconfig_set(option, value, expected):
rc = init_ctrl(output="success: option set")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_set("foobar", option, value)
assert res == "success: option set"
assert rc.term.last_command == expected
def test_ifconfig_set_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_set("foobar", "addr", "42:de:ad:c0:ff:ee")
assert rc.term.last_command == "ifconfig foobar set addr 42:de:ad:c0:ff:ee"
def test_ifconfig_up():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
si.ifconfig_up("foobar")
assert rc.term.last_command == "ifconfig foobar up"
def test_ifconfig_up_error():
rc = init_ctrl("error: unable to set link foobar")
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_up("foobar")
assert rc.term.last_command == "ifconfig foobar up"
def test_ifconfig_down():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
si.ifconfig_down("foobar")
assert rc.term.last_command == "ifconfig foobar down"
def test_ifconfig_down_error():
rc = init_ctrl("error: unable to set link foobar")
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_down("foobar")
assert rc.term.last_command == "ifconfig foobar down"
@pytest.mark.parametrize(
"kwargs,expected",
[({"netif": "foobar", "addr": "dead:coff:ee::/64"},
"ifconfig foobar add dead:coff:ee::/64"),
({"netif": "foobar", "addr": "dead:coff:ee::/64", "anycast": False},
"ifconfig foobar add dead:coff:ee::/64"),
({"netif": "foobar", "addr": "dead:coff:ee::/64", "anycast": True},
"ifconfig foobar add dead:coff:ee::/64 anycast")]
)
def test_ifconfig_add(kwargs, expected):
rc = init_ctrl(output="success: added address to interface")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_add(**kwargs)
assert res == "success: added address to interface"
assert rc.term.last_command == expected
@pytest.mark.parametrize(
"kwargs,expected",
[({"netif": "foobar", "addr": "dead:coff:ee::/64"},
"ifconfig foobar add dead:coff:ee::/64"),
({"netif": "foobar", "addr": "dead:coff:ee::/64", "anycast": False},
"ifconfig foobar add dead:coff:ee::/64"),
({"netif": "foobar", "addr": "dead:coff:ee::/64", "anycast": True},
"ifconfig foobar add dead:coff:ee::/64 anycast")]
)
def test_ifconfig_add_error(kwargs, expected):
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_add(**kwargs)
assert rc.term.last_command == expected
def test_ifconfig_del():
rc = init_ctrl(output="success: removed address from interface")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_del("foobar", "dead:coff:ee::/64")
assert res == "success: removed address from interface"
assert rc.term.last_command == "ifconfig foobar del dead:coff:ee::/64"
def test_ifconfig_del_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_del("foobar", "dead:coff:ee::/64")
assert rc.term.last_command == "ifconfig foobar del dead:coff:ee::/64"
@pytest.mark.parametrize(
"kwargs,expected",
[({"netif": "foobar", "flag": "6lo"}, "ifconfig foobar 6lo"),
({"netif": "foobar", "flag": "6lo", "enable": True},
"ifconfig foobar 6lo"),
({"netif": "foobar", "flag": "6lo", "enable": False},
"ifconfig foobar -6lo")]
)
def test_ifconfig_flag(kwargs, expected):
rc = init_ctrl(output="success: set option")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_flag(**kwargs)
assert res == "success: set option"
assert rc.term.last_command == expected
def test_ifconfig_flag_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_flag("foobar", "6lo", False)
assert rc.term.last_command == "ifconfig foobar -6lo"
def test_ifconfig_l2filter_add():
rc = init_ctrl(output="successfully added address to filter")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_l2filter_add("foobar", "ab:cd:ef:01:23:45")
assert res == "successfully added address to filter"
assert rc.term.last_command == \
"ifconfig foobar l2filter add ab:cd:ef:01:23:45"
def test_ifconfig_l2filter_add_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_l2filter_add("foobar", "ab:cd:ef:01:23:45")
assert rc.term.last_command == \
"ifconfig foobar l2filter add ab:cd:ef:01:23:45"
def test_ifconfig_l2filter_del():
rc = init_ctrl(output="successfully removed address to filter")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_l2filter_del("foobar", "ab:cd:ef:01:23:45")
assert res == "successfully removed address to filter"
assert rc.term.last_command == \
"ifconfig foobar l2filter del ab:cd:ef:01:23:45"
def test_ifconfig_l2filter_del_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_l2filter_del("foobar", "ab:cd:ef:01:23:45")
assert rc.term.last_command == \
"ifconfig foobar l2filter del ab:cd:ef:01:23:45"
def test_ifconfig_stats():
rc = init_ctrl(output=" Statistics for Layer 2\n RX ...")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_stats("foobar", "l2")
assert res.startswith(" Statistics for ")
assert rc.term.last_command == \
"ifconfig foobar stats l2"
def test_ifconfig_stats_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_stats("foobar", "l2")
assert rc.term.last_command == \
"ifconfig foobar stats l2"
def test_ifconfig_stats_reset():
rc = init_ctrl(output="Reset statistics for module Layer 2!")
si = riotctrl_shell.netif.Ifconfig(rc)
res = si.ifconfig_stats_reset("foobar", "l2")
assert res == "Reset statistics for module Layer 2!"
assert rc.term.last_command == \
"ifconfig foobar stats l2 reset"
def test_ifconfig_stats_reset_error():
rc = init_ctrl()
si = riotctrl_shell.netif.Ifconfig(rc)
with pytest.raises(RuntimeError):
si.ifconfig_stats_reset("foobar", "l2")
assert rc.term.last_command == \
"ifconfig foobar stats l2 reset"
def test_txtsnd():
rc = init_ctrl()
si = riotctrl_shell.netif.TXTSnd(rc)
res = si.netif_txtsnd("foobar", "bcast", "abcdef")
assert res == "txtsnd foobar bcast abcdef"
@pytest.mark.parametrize(
"error_msg",
["error: foobar", "usage: txtsnd foobar"]
)
def test_txtsnd_error(error_msg):
rc = init_ctrl(output=error_msg)
si = riotctrl_shell.netif.TXTSnd(rc)
with pytest.raises(RuntimeError):
si.netif_txtsnd("foobar", "bcast", "abcdef")
assert rc.term.last_command == "txtsnd foobar bcast abcdef"