mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-15 21:52:46 +01:00
294 lines
9.5 KiB
Python
294 lines
9.5 KiB
Python
# 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"
|