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
@@ -39,10 +39,12 @@ def test_sources_legacy_only(localstorage):
|
||||
|
||||
|
||||
def test_sources_mixed_and_missing():
|
||||
src = environment_sources({
|
||||
"ThermalSubsystem": {"@odata.id": "/redfish/v1/Chassis/X/ThermalSubsystem"},
|
||||
"Power": {"@odata.id": "/redfish/v1/Chassis/X/Power"},
|
||||
})
|
||||
src = environment_sources(
|
||||
{
|
||||
"ThermalSubsystem": {"@odata.id": "/redfish/v1/Chassis/X/ThermalSubsystem"},
|
||||
"Power": {"@odata.id": "/redfish/v1/Chassis/X/Power"},
|
||||
}
|
||||
)
|
||||
assert src["thermal"]["schema"] == "ThermalSubsystem"
|
||||
assert src["power"]["schema"] == "Power"
|
||||
assert environment_sources({}) == {"thermal": None, "power": None, "sensors": None}
|
||||
@@ -68,42 +70,70 @@ def test_thermal(rackmount):
|
||||
"reading, health, alert, critical",
|
||||
[
|
||||
(41, "OK", False, False),
|
||||
(42, "OK", True, False), # at UpperThresholdNonCritical
|
||||
(45, "OK", True, True), # at UpperThresholdCritical
|
||||
(49, "OK", True, True), # above UpperThresholdFatal
|
||||
(4, "OK", True, True), # below LowerThresholdCritical
|
||||
(9, "OK", True, False), # below LowerThresholdNonCritical
|
||||
(42, "OK", True, False), # at UpperThresholdNonCritical
|
||||
(45, "OK", True, True), # at UpperThresholdCritical
|
||||
(49, "OK", True, True), # above UpperThresholdFatal
|
||||
(4, "OK", True, True), # below LowerThresholdCritical
|
||||
(9, "OK", True, False), # below LowerThresholdNonCritical
|
||||
(30, "Warning", True, False),
|
||||
(30, "Critical", True, True),
|
||||
],
|
||||
)
|
||||
def test_thermal_thresholds(reading, health, alert, critical):
|
||||
env = parse_thermal({"Temperatures": [{
|
||||
"Name": "T", "ReadingCelsius": reading, "Status": {"State": "Enabled", "Health": health},
|
||||
"UpperThresholdNonCritical": 42, "UpperThresholdCritical": 45, "UpperThresholdFatal": 48,
|
||||
"LowerThresholdNonCritical": 10, "LowerThresholdCritical": 5,
|
||||
}]})
|
||||
env = parse_thermal(
|
||||
{
|
||||
"Temperatures": [
|
||||
{
|
||||
"Name": "T",
|
||||
"ReadingCelsius": reading,
|
||||
"Status": {"State": "Enabled", "Health": health},
|
||||
"UpperThresholdNonCritical": 42,
|
||||
"UpperThresholdCritical": 45,
|
||||
"UpperThresholdFatal": 48,
|
||||
"LowerThresholdNonCritical": 10,
|
||||
"LowerThresholdCritical": 5,
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
assert env["temperature"]["T"] == {
|
||||
"temperature": float(reading), "is_alert": alert, "is_critical": critical}
|
||||
"temperature": float(reading),
|
||||
"is_alert": alert,
|
||||
"is_critical": critical,
|
||||
}
|
||||
|
||||
|
||||
def test_thermal_old_schema_names_and_duplicates():
|
||||
# Thermal 1.0 uses FanName; Supermicro repeats names across members.
|
||||
env = parse_thermal({
|
||||
"Fans": [
|
||||
{"MemberId": "0", "FanName": "FAN1", "Reading": 3000, "Status": {"State": "Enabled",
|
||||
"Health": "OK"}},
|
||||
{"MemberId": "1", "FanName": "FAN2", "Status": {"State": "Absent"}},
|
||||
{"MemberId": "2", "FanName": "FAN3", "Reading": 0,
|
||||
"Status": {"State": "Enabled", "Health": "Critical"}},
|
||||
{"MemberId": "3", "FanName": "FAN1", "Reading": 2900,
|
||||
"Status": {"State": "Enabled", "Health": "OK"}},
|
||||
],
|
||||
"Temperatures": [
|
||||
{"MemberId": "0", "Name": "System Temp", "ReadingCelsius": 30},
|
||||
{"MemberId": "1", "Name": "System Temp", "ReadingCelsius": 31},
|
||||
],
|
||||
})
|
||||
env = parse_thermal(
|
||||
{
|
||||
"Fans": [
|
||||
{
|
||||
"MemberId": "0",
|
||||
"FanName": "FAN1",
|
||||
"Reading": 3000,
|
||||
"Status": {"State": "Enabled", "Health": "OK"},
|
||||
},
|
||||
{"MemberId": "1", "FanName": "FAN2", "Status": {"State": "Absent"}},
|
||||
{
|
||||
"MemberId": "2",
|
||||
"FanName": "FAN3",
|
||||
"Reading": 0,
|
||||
"Status": {"State": "Enabled", "Health": "Critical"},
|
||||
},
|
||||
{
|
||||
"MemberId": "3",
|
||||
"FanName": "FAN1",
|
||||
"Reading": 2900,
|
||||
"Status": {"State": "Enabled", "Health": "OK"},
|
||||
},
|
||||
],
|
||||
"Temperatures": [
|
||||
{"MemberId": "0", "Name": "System Temp", "ReadingCelsius": 30},
|
||||
{"MemberId": "1", "Name": "System Temp", "ReadingCelsius": 31},
|
||||
],
|
||||
}
|
||||
)
|
||||
assert env["fans"] == {
|
||||
"FAN1": {"status": True},
|
||||
"FAN3": {"status": False},
|
||||
@@ -126,10 +156,14 @@ def test_power(rackmount):
|
||||
|
||||
|
||||
def test_power_unknown_values_are_minus_one():
|
||||
env = parse_power({"PowerSupplies": [
|
||||
{"MemberId": "0", "Name": "PS1", "Status": {"State": "Enabled", "Health": "OK"}},
|
||||
{"MemberId": "1", "Name": "PS2", "Status": {"State": "Absent"}},
|
||||
]})
|
||||
env = parse_power(
|
||||
{
|
||||
"PowerSupplies": [
|
||||
{"MemberId": "0", "Name": "PS1", "Status": {"State": "Enabled", "Health": "OK"}},
|
||||
{"MemberId": "1", "Name": "PS2", "Status": {"State": "Absent"}},
|
||||
]
|
||||
}
|
||||
)
|
||||
assert env["power"] == {"PS1": {"status": True, "capacity": -1.0, "output": -1.0}}
|
||||
assert env["consumed_watts"] is None
|
||||
assert env["voltages"] == {}
|
||||
@@ -211,8 +245,8 @@ def test_sensor_temperature_by_units(rackmount):
|
||||
assert s["units"] == "Cel"
|
||||
assert s["physical_context"] == "CPU"
|
||||
assert s["health"] == "Warning"
|
||||
assert s["is_alert"] is True # 44 >= UpperCaution 42
|
||||
assert s["is_critical"] is False # 44 < UpperCritical 45
|
||||
assert s["is_alert"] is True # 44 >= UpperCaution 42
|
||||
assert s["is_critical"] is False # 44 < UpperCritical 45
|
||||
|
||||
|
||||
def test_sensor_power(rackmount):
|
||||
@@ -234,28 +268,37 @@ def test_sensor_voltage_and_fan(rackmount):
|
||||
|
||||
|
||||
def test_sensor_without_reading():
|
||||
s = parse_sensor({"Id": "X", "Name": "X", "ReadingUnits": "Cel",
|
||||
"Status": {"State": "Disabled"}})
|
||||
s = parse_sensor(
|
||||
{"Id": "X", "Name": "X", "ReadingUnits": "Cel", "Status": {"State": "Disabled"}}
|
||||
)
|
||||
assert s["reading"] is None
|
||||
assert s["is_alert"] is False
|
||||
|
||||
|
||||
def test_thermal_metrics(rackmount):
|
||||
env = parse_thermal_metrics(rackmount(CHASSIS + "/ThermalSubsystem/ThermalMetrics"))
|
||||
assert env == {"temperature": {
|
||||
"Intake": {"temperature": 24.8, "is_alert": False, "is_critical": False},
|
||||
"Exhaust": {"temperature": 40.5, "is_alert": False, "is_critical": False},
|
||||
}}
|
||||
assert env == {
|
||||
"temperature": {
|
||||
"Intake": {"temperature": 24.8, "is_alert": False, "is_critical": False},
|
||||
"Exhaust": {"temperature": 40.5, "is_alert": False, "is_critical": False},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def test_build_environment_from_new_resources(rackmount):
|
||||
fans = [parse_fan(rackmount(f"{CHASSIS}/ThermalSubsystem/Fans/{f}"))
|
||||
for f in ("Bay1", "Bay2", "CPU1", "CPU2")]
|
||||
fans = [
|
||||
parse_fan(rackmount(f"{CHASSIS}/ThermalSubsystem/Fans/{f}"))
|
||||
for f in ("Bay1", "Bay2", "CPU1", "CPU2")
|
||||
]
|
||||
bay1 = f"{CHASSIS}/PowerSubsystem/PowerSupplies/Bay1"
|
||||
psus = [parse_power_supply(rackmount(bay1), rackmount(bay1 + "/Metrics")),
|
||||
parse_power_supply(rackmount(f"{CHASSIS}/PowerSubsystem/PowerSupplies/Bay2"))]
|
||||
sensors = [parse_sensor(rackmount(f"{CHASSIS}/Sensors/{s}"))
|
||||
for s in ("CPU1Temp", "IntakeTemp", "CPUFan1", "TotalPower", "PS1InputVoltage")]
|
||||
psus = [
|
||||
parse_power_supply(rackmount(bay1), rackmount(bay1 + "/Metrics")),
|
||||
parse_power_supply(rackmount(f"{CHASSIS}/PowerSubsystem/PowerSupplies/Bay2")),
|
||||
]
|
||||
sensors = [
|
||||
parse_sensor(rackmount(f"{CHASSIS}/Sensors/{s}"))
|
||||
for s in ("CPU1Temp", "IntakeTemp", "CPUFan1", "TotalPower", "PS1InputVoltage")
|
||||
]
|
||||
env = build_environment(fans=fans, power_supplies=psus, sensors=sensors)
|
||||
assert env["fans"] == {
|
||||
"Fan Bay 1": {"status": True},
|
||||
@@ -269,18 +312,29 @@ def test_build_environment_from_new_resources(rackmount):
|
||||
assert env["temperature"] == {
|
||||
"CPU #1 Temperature": {"temperature": 44.0, "is_alert": True, "is_critical": False},
|
||||
"Front Panel Intake Temperature": {
|
||||
"temperature": 24.8, "is_alert": False, "is_critical": False},
|
||||
"temperature": 24.8,
|
||||
"is_alert": False,
|
||||
"is_critical": False,
|
||||
},
|
||||
}
|
||||
assert env["consumed_watts"] == 374.0
|
||||
assert env["voltages"] == {
|
||||
"Power Supply #1 Input Voltage": {
|
||||
"voltage": 119.27, "is_alert": False, "is_critical": False},
|
||||
"voltage": 119.27,
|
||||
"is_alert": False,
|
||||
"is_critical": False,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_build_environment_empty():
|
||||
assert build_environment() == {
|
||||
"fans": {}, "temperature": {}, "power": {}, "voltages": {}, "consumed_watts": None}
|
||||
"fans": {},
|
||||
"temperature": {},
|
||||
"power": {},
|
||||
"voltages": {},
|
||||
"consumed_watts": None,
|
||||
}
|
||||
|
||||
|
||||
def test_power_supply_legacy_item(rackmount):
|
||||
|
||||
Reference in new issue
Block a user