mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
248 lines
9.2 KiB
Python
248 lines
9.2 KiB
Python
from textwrap import dedent
|
|
|
|
import pytest
|
|
|
|
import salt.modules.ethtool as ethtool
|
|
from salt.exceptions import CommandExecutionError
|
|
from tests.support.mock import MagicMock, patch
|
|
|
|
|
|
@pytest.fixture
|
|
def configure_loader_modules():
|
|
return {
|
|
ethtool: {
|
|
"__salt__": {},
|
|
}
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def pause_ret():
|
|
cmdret = dedent(
|
|
"""Pause parameters for eth0:
|
|
Autonegotiate: on
|
|
RX: on
|
|
TX: on
|
|
RX negotiated: off
|
|
TX negotiated: off"""
|
|
)
|
|
return cmdret
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def features_ret():
|
|
cmdret = dedent(
|
|
"""Features for eth0:
|
|
rx-checksumming: on [fixed]
|
|
tx-checksumming: on
|
|
tx-checksum-ipv4: off [fixed]
|
|
tx-checksum-ip-generic: on
|
|
tx-checksum-ipv6: off [fixed]
|
|
tx-checksum-fcoe-crc: off [fixed]
|
|
tx-checksum-sctp: off [fixed]
|
|
scatter-gather: on
|
|
tx-scatter-gather: on
|
|
tx-scatter-gather-fraglist: off [fixed]
|
|
tcp-segmentation-offload: on
|
|
tx-tcp-segmentation: on
|
|
tx-tcp-ecn-segmentation: on
|
|
tx-tcp-mangleid-segmentation: off
|
|
tx-tcp6-segmentation: on
|
|
udp-fragmentation-offload: off
|
|
generic-segmentation-offload: on
|
|
generic-receive-offload: on
|
|
large-receive-offload: off [fixed]
|
|
rx-vlan-offload: off [fixed]
|
|
tx-vlan-offload: off [fixed]
|
|
ntuple-filters: off [fixed]
|
|
receive-hashing: off [fixed]
|
|
highdma: on [fixed]
|
|
rx-vlan-filter: on [fixed]
|
|
vlan-challenged: off [fixed]
|
|
tx-lockless: off [fixed]
|
|
netns-local: off [fixed]
|
|
tx-gso-robust: on [fixed]
|
|
tx-fcoe-segmentation: off [fixed]
|
|
tx-gre-segmentation: off [fixed]
|
|
tx-gre-csum-segmentation: off [fixed]
|
|
tx-ipxip4-segmentation: off [fixed]
|
|
tx-ipxip6-segmentation: off [fixed]
|
|
tx-udp_tnl-segmentation: off [fixed]
|
|
tx-udp_tnl-csum-segmentation: off [fixed]
|
|
tx-gso-partial: off [fixed]
|
|
tx-sctp-segmentation: off [fixed]
|
|
tx-esp-segmentation: off [fixed]
|
|
tx-udp-segmentation: off [fixed]
|
|
fcoe-mtu: off [fixed]
|
|
tx-nocache-copy: off
|
|
loopback: off [fixed]
|
|
rx-fcs: off [fixed]
|
|
rx-all: off [fixed]
|
|
tx-vlan-stag-hw-insert: off [fixed]
|
|
rx-vlan-stag-hw-parse: off [fixed]
|
|
rx-vlan-stag-filter: off [fixed]
|
|
l2-fwd-offload: off [fixed]
|
|
hw-tc-offload: off [fixed]
|
|
esp-hw-offload: off [fixed]
|
|
esp-tx-csum-hw-offload: off [fixed]
|
|
rx-udp_tunnel-port-offload: off [fixed]
|
|
tls-hw-tx-offload: off [fixed]
|
|
tls-hw-rx-offload: off [fixed]
|
|
rx-gro-hw: off [fixed]
|
|
tls-hw-record: off [fixed]"""
|
|
)
|
|
return cmdret
|
|
|
|
|
|
def test_ethtool__ethtool_command_which_fail():
|
|
with patch("salt.utils.path.which", MagicMock(return_value=None)):
|
|
with pytest.raises(CommandExecutionError):
|
|
ethtool._ethtool_command("eth0")
|
|
|
|
|
|
def test_ethtool__ethtool_command_operation_not_supported():
|
|
mock_cmd_run = MagicMock(
|
|
side_effect=[
|
|
"Pause parameters for eth0:\nCannot get device pause settings: Operation not supported",
|
|
"Cannot get device pause settings: Operation not supported",
|
|
]
|
|
)
|
|
with patch(
|
|
"salt.utils.path.which", MagicMock(return_value="/sbin/ethtool")
|
|
), patch.dict(ethtool.__salt__, {"cmd.run": mock_cmd_run}):
|
|
with pytest.raises(CommandExecutionError):
|
|
ethtool._ethtool_command("eth0", "-a")
|
|
ethtool._ethtool_command("eth0", "-A", autoneg="off", rx="off", tx="off")
|
|
|
|
|
|
def test_ethtool__ethtool_command(pause_ret):
|
|
mock_cmd_run = MagicMock(return_value=pause_ret)
|
|
|
|
with patch(
|
|
"salt.utils.path.which", MagicMock(return_value="/sbin/ethtool")
|
|
), patch.dict(ethtool.__salt__, {"cmd.run": mock_cmd_run}):
|
|
ret = ethtool._ethtool_command("eth0", "-A", autoneg="off", rx="off", tx="off")
|
|
|
|
mock_cmd_run.assert_called_once_with(
|
|
"/sbin/ethtool -A eth0 autoneg off rx off tx off", ignore_retcode=True
|
|
)
|
|
assert pause_ret.splitlines() == ret
|
|
|
|
|
|
def test_ethtool__validate_params():
|
|
with pytest.raises(CommandExecutionError):
|
|
ethtool._validate_params(["not_found"], {"eth": "tool"})
|
|
assert ethtool._validate_params(["eth"], {"eth": "tool"}) == {"eth": "tool"}
|
|
assert ethtool._validate_params(["eth", "not_found"], {"eth": "tool"}) == {
|
|
"eth": "tool"
|
|
}
|
|
assert ethtool._validate_params(["eth", "salt"], {"eth": True, "salt": False}) == {
|
|
"eth": "on",
|
|
"salt": "off",
|
|
}
|
|
|
|
|
|
def test_ethtool_show_pause(pause_ret):
|
|
expected = {
|
|
"Autonegotiate": True,
|
|
"RX": True,
|
|
"RX negotiated": False,
|
|
"TX": True,
|
|
"TX negotiated": False,
|
|
}
|
|
|
|
with patch(
|
|
"salt.modules.ethtool._ethtool_command",
|
|
MagicMock(return_value=pause_ret.splitlines()),
|
|
):
|
|
ret = ethtool.show_pause("eth0")
|
|
|
|
assert expected == ret
|
|
|
|
|
|
def test_ethtool_show_features(features_ret):
|
|
expected = {
|
|
"esp-hw-offload": {"fixed": True, "on": False},
|
|
"esp-tx-csum-hw-offload": {"fixed": True, "on": False},
|
|
"fcoe-mtu": {"fixed": True, "on": False},
|
|
"generic-receive-offload": {"fixed": False, "on": True},
|
|
"generic-segmentation-offload": {"fixed": False, "on": True},
|
|
"highdma": {"fixed": True, "on": True},
|
|
"hw-tc-offload": {"fixed": True, "on": False},
|
|
"l2-fwd-offload": {"fixed": True, "on": False},
|
|
"large-receive-offload": {"fixed": True, "on": False},
|
|
"loopback": {"fixed": True, "on": False},
|
|
"netns-local": {"fixed": True, "on": False},
|
|
"ntuple-filters": {"fixed": True, "on": False},
|
|
"receive-hashing": {"fixed": True, "on": False},
|
|
"rx-all": {"fixed": True, "on": False},
|
|
"rx-checksumming": {"fixed": True, "on": True},
|
|
"rx-fcs": {"fixed": True, "on": False},
|
|
"rx-gro-hw": {"fixed": True, "on": False},
|
|
"rx-udp_tunnel-port-offload": {"fixed": True, "on": False},
|
|
"rx-vlan-filter": {"fixed": True, "on": True},
|
|
"rx-vlan-offload": {"fixed": True, "on": False},
|
|
"rx-vlan-stag-filter": {"fixed": True, "on": False},
|
|
"rx-vlan-stag-hw-parse": {"fixed": True, "on": False},
|
|
"scatter-gather": {"fixed": False, "on": True},
|
|
"tcp-segmentation-offload": {"fixed": False, "on": True},
|
|
"tls-hw-record": {"fixed": True, "on": False},
|
|
"tls-hw-rx-offload": {"fixed": True, "on": False},
|
|
"tls-hw-tx-offload": {"fixed": True, "on": False},
|
|
"tx-checksum-fcoe-crc": {"fixed": True, "on": False},
|
|
"tx-checksum-ip-generic": {"fixed": False, "on": True},
|
|
"tx-checksum-ipv4": {"fixed": True, "on": False},
|
|
"tx-checksum-ipv6": {"fixed": True, "on": False},
|
|
"tx-checksum-sctp": {"fixed": True, "on": False},
|
|
"tx-checksumming": {"fixed": False, "on": True},
|
|
"tx-esp-segmentation": {"fixed": True, "on": False},
|
|
"tx-fcoe-segmentation": {"fixed": True, "on": False},
|
|
"tx-gre-csum-segmentation": {"fixed": True, "on": False},
|
|
"tx-gre-segmentation": {"fixed": True, "on": False},
|
|
"tx-gso-partial": {"fixed": True, "on": False},
|
|
"tx-gso-robust": {"fixed": True, "on": True},
|
|
"tx-ipxip4-segmentation": {"fixed": True, "on": False},
|
|
"tx-ipxip6-segmentation": {"fixed": True, "on": False},
|
|
"tx-lockless": {"fixed": True, "on": False},
|
|
"tx-nocache-copy": {"fixed": False, "on": False},
|
|
"tx-scatter-gather": {"fixed": False, "on": True},
|
|
"tx-scatter-gather-fraglist": {"fixed": True, "on": False},
|
|
"tx-sctp-segmentation": {"fixed": True, "on": False},
|
|
"tx-tcp-ecn-segmentation": {"fixed": False, "on": True},
|
|
"tx-tcp-mangleid-segmentation": {"fixed": False, "on": False},
|
|
"tx-tcp-segmentation": {"fixed": False, "on": True},
|
|
"tx-tcp6-segmentation": {"fixed": False, "on": True},
|
|
"tx-udp-segmentation": {"fixed": True, "on": False},
|
|
"tx-udp_tnl-csum-segmentation": {"fixed": True, "on": False},
|
|
"tx-udp_tnl-segmentation": {"fixed": True, "on": False},
|
|
"tx-vlan-offload": {"fixed": True, "on": False},
|
|
"tx-vlan-stag-hw-insert": {"fixed": True, "on": False},
|
|
"udp-fragmentation-offload": {"fixed": False, "on": False},
|
|
"vlan-challenged": {"fixed": True, "on": False},
|
|
}
|
|
|
|
with patch(
|
|
"salt.modules.ethtool._ethtool_command",
|
|
MagicMock(return_value=features_ret.splitlines()),
|
|
):
|
|
ret = ethtool.show_features("eth0")
|
|
|
|
assert expected == ret
|
|
|
|
|
|
def test_ethtool_set_pause():
|
|
with patch("salt.modules.ethtool._ethtool_command", MagicMock(return_value="")):
|
|
with pytest.raises(CommandExecutionError):
|
|
ethtool.set_pause("eth0", not_there=False)
|
|
ret = ethtool.set_pause("eth0", autoneg=False)
|
|
|
|
assert ret is True
|
|
|
|
|
|
def test_ethtool_set_feature():
|
|
with patch("salt.modules.ethtool._ethtool_command", MagicMock(return_value="")):
|
|
with pytest.raises(CommandExecutionError):
|
|
ethtool.set_feature("eth0", not_there=False)
|
|
ret = ethtool.set_feature("eth0", sg=False)
|
|
|
|
assert ret is True
|