def test_execute_set_fan_speed_action(): chassis = MockChassis() fan_list = chassis.get_all_fans() fan_list.append(MockFan()) fan_list.append(MockFan()) fan_info = FanInfo() fan_info.collect(chassis) from sonic_platform.thermal_actions import SetAllFanSpeedAction action = SetAllFanSpeedAction() action.speed = 99 action.execute({'fan_info': fan_info}) assert fan_list[0].speed == 99 assert fan_list[1].speed == 99
def test_execute_set_fan_speed_action(): chassis = MockChassis() chassis.get_all_fan_drawers().append(MockFanDrawer()) fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() fan_list.append(MockFan()) fan_list.append(MockFan()) fan_info = FanInfo() fan_info.collect(chassis) Thermal.expect_cooling_level = None from sonic_platform.thermal_actions import SetAllFanSpeedAction action = SetAllFanSpeedAction() action.speed = 20 action.execute({'fan_info': fan_info}) assert Thermal.expect_cooling_level == 2
def test_dynamic_minimum_policy(thermal_manager): from sonic_platform.thermal_conditions import MinCoolingLevelChangeCondition from sonic_platform.thermal_actions import ChangeMinCoolingLevelAction from sonic_platform.thermal_infos import ChassisInfo, FanInfo from sonic_platform.thermal import Thermal from sonic_platform.fan import Fan ThermalManager.initialize() assert 'DynamicMinCoolingLevelPolicy' in thermal_manager._policy_dict policy = thermal_manager._policy_dict['DynamicMinCoolingLevelPolicy'] assert MinCoolingLevelChangeCondition in policy.conditions assert ChangeMinCoolingLevelAction in policy.actions condition = policy.conditions[MinCoolingLevelChangeCondition] action = policy.actions[ChangeMinCoolingLevelAction] Thermal.check_module_temperature_trustable = MagicMock( return_value='trust') Thermal.get_min_amb_temperature = MagicMock(return_value=35001) assert condition.is_match(None) assert MinCoolingLevelChangeCondition.trust_state == 'trust' assert MinCoolingLevelChangeCondition.temperature == 35 assert not condition.is_match(None) Thermal.check_module_temperature_trustable = MagicMock( return_value='untrust') assert condition.is_match(None) assert MinCoolingLevelChangeCondition.trust_state == 'untrust' Thermal.get_min_amb_temperature = MagicMock(return_value=25999) assert condition.is_match(None) assert MinCoolingLevelChangeCondition.temperature == 25 chassis = MockChassis() info = ChassisInfo() info._chassis = chassis fan_info = FanInfo() thermal_info_dict = { ChassisInfo.INFO_NAME: info, FanInfo.INFO_NAME: fan_info } DeviceDataManager.get_platform_name = MagicMock(return_value=None) Fan.get_cooling_level = MagicMock(return_value=5) Fan.set_cooling_level = MagicMock() action.execute(thermal_info_dict) assert Fan.min_cooling_level == 6 Fan.set_cooling_level.assert_called_with(6, 6) Fan.set_cooling_level.call_count = 0 DeviceDataManager.get_platform_name = MagicMock( return_value='x86_64-mlnx_msn2700-r0') print('Before execute') action.execute(thermal_info_dict) assert Fan.min_cooling_level == 3 Fan.set_cooling_level.assert_called_with(3, 5)
def test_execute_check_and_set_fan_speed_action(): chassis = MockChassis() fan_list = chassis.get_all_fans() fan_list.append(MockFan()) fan_list.append(MockFan()) fan_info = FanInfo() fan_info.collect(chassis) Thermal.check_thermal_zone_temperature = MagicMock(return_value=True) from sonic_platform.thermal_actions import CheckAndSetAllFanSpeedAction action = CheckAndSetAllFanSpeedAction() action.speed = 99 action.execute({'fan_info': fan_info}) assert fan_list[0].speed == 99 assert fan_list[1].speed == 99 Thermal.check_thermal_zone_temperature = MagicMock(return_value=False) fan_list[0].speed = 100 fan_list[1].speed = 100 action.speed = 60 action.execute({'fan_info': fan_info}) assert fan_list[0].speed == 100 assert fan_list[1].speed == 100
def test_any_fan_absence_condition(): chassis = MockChassis() chassis.make_fan_absence() fan_info = FanInfo() fan_info.collect(chassis) from sonic_platform.thermal_conditions import AnyFanAbsenceCondition condition = AnyFanAbsenceCondition() assert condition.is_match({'fan_info': fan_info}) fan = chassis.get_all_fan_drawers()[0].get_all_fans()[0] fan.presence = True fan_info.collect(chassis) assert not condition.is_match({'fan_info': fan_info})
def test_all_fan_presence_condition(): chassis = MockChassis() chassis.make_fan_absence() fan = MockFan() fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() fan_list.append(fan) fan_info = FanInfo() fan_info.collect(chassis) from sonic_platform.thermal_conditions import AllFanPresenceCondition condition = AllFanPresenceCondition() assert not condition.is_match({'fan_info': fan_info}) fan_list[0].presence = True fan_info.collect(chassis) assert condition.is_match({'fan_info': fan_info})
def test_all_fan_good_condition(): chassis = MockChassis() fan = MockFan() fan_list = chassis.get_all_fans() fan_list.append(fan) fault_fan = MockFan() fault_fan.status = False fan_list.append(fault_fan) fan_info = FanInfo() fan_info.collect(chassis) from sonic_platform.thermal_conditions import AllFanGoodCondition condition = AllFanGoodCondition() assert not condition.is_match({'fan_info': fan_info}) fault_fan.status = True fan_info.collect(chassis) assert condition.is_match({'fan_info': fan_info})
def test_any_fan_fault_condition(): chassis = MockChassis() chassis.get_all_fan_drawers().append(MockFanDrawer()) fan = MockFan() fan_list = chassis.get_all_fan_drawers()[0].get_all_fans() fan_list.append(fan) fault_fan = MockFan() fault_fan.status = False fan_list.append(fault_fan) fan_info = FanInfo() fan_info.collect(chassis) from sonic_platform.thermal_conditions import AnyFanFaultCondition condition = AnyFanFaultCondition() assert condition.is_match({'fan_info': fan_info}) fault_fan.status = True fan_info.collect(chassis) assert not condition.is_match({'fan_info': fan_info})
def test_fan_info(): chassis = MockChassis() chassis.make_fan_absence() fan_info = FanInfo() fan_info.collect(chassis) assert len(fan_info.get_absence_fans()) == 1 assert len(fan_info.get_presence_fans()) == 0 assert len(fan_info.get_fault_fans()) == 0 assert fan_info.is_status_changed() chassis.get_all_fan_drawers()[0].get_all_fans()[0].presence = True fan_info.collect(chassis) assert len(fan_info.get_absence_fans()) == 0 assert len(fan_info.get_presence_fans()) == 1 assert len(fan_info.get_fault_fans()) == 0 assert fan_info.is_status_changed() chassis.get_all_fan_drawers()[0].get_all_fans()[0].status = False fan_info.collect(chassis) assert len(fan_info.get_absence_fans()) == 0 assert len(fan_info.get_presence_fans()) == 1 assert len(fan_info.get_fault_fans()) == 1 assert fan_info.is_status_changed()