Skip to content

Commit a9b2b40

Browse files
committed
Add new liquid cooling base object
Signed-off-by: Yuanzhe, Liu <[email protected]>
1 parent d1490de commit a9b2b40

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
"""
2+
liquid_cooling_base.py
3+
4+
Abstract base class for implementing a platform-specific class with which
5+
to interact with a liquid cooling module in SONiC
6+
"""
7+
8+
from . import device_base
9+
from .sensor_base import SensorBase
10+
11+
class LeakageSensorBase(SensorBase):
12+
def __init__(self, name):
13+
self.name = name
14+
self.leaking = False
15+
16+
def get_name(self):
17+
"""
18+
Retrieves the name of the leakage sensor
19+
20+
Returns:
21+
tring: the name of the leakage sensor
22+
"""
23+
return self.name
24+
25+
def is_leak(self):
26+
"""
27+
Retrieves the leak status of the sensor
28+
29+
Returns:
30+
bool: True if leak is detected, False if not
31+
"""
32+
return self.leaking
33+
34+
class LiquidCoolingBase(device_base.DeviceBase):
35+
"""
36+
Base class for implementing liquid cooling system
37+
"""
38+
39+
def __init__(self, leakage_sensors_num = 0, leakage_sensors_list = None):
40+
self.leakage_sensors_num = leakage_sensors_num
41+
self.leakage_sensors = leakage_sensors_list if leakage_sensors_list else []
42+
43+
def get_num_leak_sensors(self):
44+
"""
45+
Retrieves the number of leakage sensors
46+
47+
Returns:
48+
int: The number of leakage sensors
49+
"""
50+
return self.leakage_sensors_num
51+
52+
def get_leak_sensor(self, index):
53+
"""
54+
Retrieves the leakage sensor by index
55+
"""
56+
sensor = None
57+
58+
try:
59+
sensor = self.leakage_sensors[index]
60+
except IndexError:
61+
sys.stderr.write("Leakage sensor index {} out of range (0-{})\n".format(
62+
index, len(self.leakage_sensors)-1))
63+
64+
return sensor
65+
66+
def get_all_leak_sensors(self):
67+
"""
68+
Retrieves the list of leakage sensors
69+
70+
Returns:
71+
list: A list of leakage sensor names
72+
"""
73+
return self.leakage_sensors
74+
75+
def get_leak_sensor_status(self):
76+
"""
77+
Retrieves the leak status of the sensors
78+
79+
Returns:
80+
list: A list of leakage sensor names that are leaking, empty list if no leakage
81+
"""
82+
leaking_sensors = []
83+
for sensor in self.leakage_sensors:
84+
if sensor.is_leak():
85+
leaking_sensors.append(sensor)
86+
return leaking_sensors
87+

tests/liquid_cooling_base_test.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'''
2+
Test liquid_cooling_base module
3+
'''
4+
5+
from sonic_platform_base.liquid_cooling_base import LeakageSensorBase
6+
from sonic_platform_base.liquid_cooling_base import LiquidCoolingBase
7+
8+
class TestLeakageSensorBase:
9+
'''
10+
Collection of LeakageSensorBase test methods
11+
'''
12+
13+
@staticmethod
14+
def test_leakage_sensor_base_init():
15+
'''
16+
Test leakage sensor base default implementation
17+
'''
18+
leakage_sensor = LeakageSensorBase("test_sensor")
19+
20+
assert leakage_sensor.get_name() == "test_sensor"
21+
assert leakage_sensor.is_leak() == False
22+
23+
class TestLiquidCoolingBase():
24+
'''
25+
Collection of LiquidCoolingBase test methods
26+
'''
27+
28+
@staticmethod
29+
def test_liquid_cooling_base_init():
30+
'''
31+
Test liquid cooling base default implementation
32+
'''
33+
liquid_cooling = LiquidCoolingBase()
34+
35+
assert liquid_cooling.get_num_leak_sensors() == 0
36+
assert liquid_cooling.get_all_leak_sensors() == []
37+
assert liquid_cooling.get_leak_sensor_status() == []
38+

0 commit comments

Comments
 (0)