style: ruff format and the lint rules of the driver standard
Mechanical: ruff format, and ruff check --fix with the rule set every NAPALM driver uses (E, F, I, UP, B at line length 100, Python 3.10). Mapping and Iterable come from collections.abc, imports are sorted. What ruff cannot fix comes in the next commit.
This commit is contained in:
1 parent
5b24675a12
commit
09029ca0a4
29 files changed
+985
-456
No files matched your search
+90
-34
@@ -105,8 +105,12 @@ def test_open_logs_in_on_the_ipmi_port_and_close_logs_out():
|
||||
d = IpmiDriver("192.0.2.150", "netork", "s3cret", optional_args={"port": 6230})
|
||||
d.open()
|
||||
(cmd,) = FakeCommand.instances
|
||||
assert cmd.args == {"bmc": "192.0.2.150", "userid": "netork", "password": "s3cret",
|
||||
"port": 6230}
|
||||
assert cmd.args == {
|
||||
"bmc": "192.0.2.150",
|
||||
"userid": "netork",
|
||||
"password": "s3cret",
|
||||
"port": 6230,
|
||||
}
|
||||
assert d.is_alive() == {"is_alive": True}
|
||||
d.close()
|
||||
assert cmd.logged_out
|
||||
@@ -167,8 +171,11 @@ def test_get_environment(driver):
|
||||
assert set(env) == {"fans", "temperature", "power", "cpu", "memory"}
|
||||
assert env["cpu"] == {} and env["memory"] == {}
|
||||
assert len(env["temperature"]) == 19
|
||||
assert env["temperature"]["CPU1 Temp"] == {"temperature": 34.0, "is_alert": False,
|
||||
"is_critical": False}
|
||||
assert env["temperature"]["CPU1 Temp"] == {
|
||||
"temperature": 34.0,
|
||||
"is_alert": False,
|
||||
"is_critical": False,
|
||||
}
|
||||
assert env["fans"] == {name: {"status": True} for name in ("FAN2", "FAN3", "FAN4", "FANB")}
|
||||
# Only supplies that report themselves present.
|
||||
assert env["power"] == {"PS1 Status": {"status": True, "capacity": -1.0, "output": -1.0}}
|
||||
@@ -176,17 +183,46 @@ def test_get_environment(driver):
|
||||
|
||||
def test_sensor_health_flags(driver, monkeypatch):
|
||||
readings = [
|
||||
{"name": "Hot", "type": "Temperature", "value": 91.0, "units": "°C", "health": 1,
|
||||
"states": [], "unavailable": 0},
|
||||
{"name": "Melting", "type": "Temperature", "value": 105.0, "units": "°C", "health": 2,
|
||||
"states": [], "unavailable": 0},
|
||||
{"name": "Gone", "type": "Temperature", "value": None, "units": "°C", "health": 0,
|
||||
"states": [], "unavailable": 1},
|
||||
{"name": "FAN1", "type": "Fan", "value": 0.0, "units": "RPM", "health": 2,
|
||||
"states": [], "unavailable": 0},
|
||||
{
|
||||
"name": "Hot",
|
||||
"type": "Temperature",
|
||||
"value": 91.0,
|
||||
"units": "°C",
|
||||
"health": 1,
|
||||
"states": [],
|
||||
"unavailable": 0,
|
||||
},
|
||||
{
|
||||
"name": "Melting",
|
||||
"type": "Temperature",
|
||||
"value": 105.0,
|
||||
"units": "°C",
|
||||
"health": 2,
|
||||
"states": [],
|
||||
"unavailable": 0,
|
||||
},
|
||||
{
|
||||
"name": "Gone",
|
||||
"type": "Temperature",
|
||||
"value": None,
|
||||
"units": "°C",
|
||||
"health": 0,
|
||||
"states": [],
|
||||
"unavailable": 1,
|
||||
},
|
||||
{
|
||||
"name": "FAN1",
|
||||
"type": "Fan",
|
||||
"value": 0.0,
|
||||
"units": "RPM",
|
||||
"health": 2,
|
||||
"states": [],
|
||||
"unavailable": 0,
|
||||
},
|
||||
]
|
||||
monkeypatch.setattr(FakeCommand, "get_sensor_data",
|
||||
lambda self: iter(SimpleNamespace(**r) for r in readings))
|
||||
monkeypatch.setattr(
|
||||
FakeCommand, "get_sensor_data", lambda self: iter(SimpleNamespace(**r) for r in readings)
|
||||
)
|
||||
env = driver.get_environment()
|
||||
assert env["temperature"] == {
|
||||
"Hot": {"temperature": 91.0, "is_alert": True, "is_critical": False},
|
||||
@@ -201,8 +237,7 @@ def test_sensor_health_flags(driver, monkeypatch):
|
||||
def test_get_power_state(driver):
|
||||
state = driver.get_power_state()
|
||||
assert_shape(state, models.PowerStateDict)
|
||||
assert state == {"state": "On",
|
||||
"actions": ["GracefulShutdown", "ForceOff", "ForceRestart"]}
|
||||
assert state == {"state": "On", "actions": ["GracefulShutdown", "ForceOff", "ForceRestart"]}
|
||||
|
||||
|
||||
def test_a_server_that_is_off_can_only_be_switched_on(driver):
|
||||
@@ -216,12 +251,15 @@ def test_every_offered_action_is_a_role_power_action(driver):
|
||||
assert set(driver.get_power_state()["actions"]) <= set(models.POWER_ACTIONS)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("action, powerstate, expected", [
|
||||
("GracefulShutdown", "on", "shutdown"),
|
||||
("ForceOff", "on", "off"),
|
||||
("ForceRestart", "on", "reset"),
|
||||
("On", "off", "on"),
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"action, powerstate, expected",
|
||||
[
|
||||
("GracefulShutdown", "on", "shutdown"),
|
||||
("ForceOff", "on", "off"),
|
||||
("ForceRestart", "on", "reset"),
|
||||
("On", "off", "on"),
|
||||
],
|
||||
)
|
||||
def test_set_power_state_sends_the_chassis_control(driver, action, powerstate, expected):
|
||||
cmd = FakeCommand.instances[0]
|
||||
cmd.powerstate = powerstate
|
||||
@@ -236,12 +274,15 @@ def test_set_power_state_rejects_an_unknown_action(driver):
|
||||
assert FakeCommand.instances[0].power_requests == []
|
||||
|
||||
|
||||
@pytest.mark.parametrize("action, powerstate", [
|
||||
("On", "on"),
|
||||
("ForceOff", "off"),
|
||||
("GracefulRestart", "on"), # IPMI has no graceful restart
|
||||
("PowerCycle", "on"),
|
||||
])
|
||||
@pytest.mark.parametrize(
|
||||
"action, powerstate",
|
||||
[
|
||||
("On", "on"),
|
||||
("ForceOff", "off"),
|
||||
("GracefulRestart", "on"), # IPMI has no graceful restart
|
||||
("PowerCycle", "on"),
|
||||
],
|
||||
)
|
||||
def test_set_power_state_refuses_what_is_not_offered_now(driver, action, powerstate):
|
||||
cmd = FakeCommand.instances[0]
|
||||
cmd.powerstate = powerstate
|
||||
@@ -268,8 +309,13 @@ def test_get_hardware_inventory(driver):
|
||||
assert inv["system_uuid"] == "00000000-534d-c40c-0000-000000000001"
|
||||
assert inv["power_supplies"] == [
|
||||
{"slot": "PS1", "model": "", "serial_number": "", "capacity_watts": None, "status": "OK"},
|
||||
{"slot": "PS2", "model": "", "serial_number": "", "capacity_watts": None,
|
||||
"status": "Absent"},
|
||||
{
|
||||
"slot": "PS2",
|
||||
"model": "",
|
||||
"serial_number": "",
|
||||
"capacity_watts": None,
|
||||
"status": "Absent",
|
||||
},
|
||||
]
|
||||
assert inv["cpus"] == [] and inv["memory"] == [] and inv["drives"] == [] and inv["nics"] == []
|
||||
|
||||
@@ -277,14 +323,24 @@ def test_get_hardware_inventory(driver):
|
||||
def test_get_event_log(driver):
|
||||
(entry,) = driver.get_event_log()
|
||||
assert_shape(entry, models.EventLogEntryDict)
|
||||
assert entry == {"id": "1", "timestamp": 1790788051.0, "severity": "OK",
|
||||
"message": "PS2 Status: Recovered"}
|
||||
assert entry == {
|
||||
"id": "1",
|
||||
"timestamp": 1790788051.0,
|
||||
"severity": "OK",
|
||||
"message": "PS2 Status: Recovered",
|
||||
}
|
||||
|
||||
|
||||
def test_event_log_newest_first_and_limited(driver, monkeypatch):
|
||||
sel = [
|
||||
{"record_id": i, "timecode": 1000 + i, "component": "FAN1", "event": "Lower critical",
|
||||
"severity": 2, "deassertion": False}
|
||||
{
|
||||
"record_id": i,
|
||||
"timecode": 1000 + i,
|
||||
"component": "FAN1",
|
||||
"event": "Lower critical",
|
||||
"severity": 2,
|
||||
"deassertion": False,
|
||||
}
|
||||
for i in range(1, 6)
|
||||
]
|
||||
monkeypatch.setattr(FakeCommand, "get_event_log", lambda self: iter(sel))
|
||||
|
||||
Reference in new issue
Block a user