def test_thermal_recover_policy(mock_check_trustable, mock_get_min_amb, moc_get_min_allowed, mock_platform_name): from sonic_platform.thermal_infos import ChassisInfo from sonic_platform.thermal_actions import ThermalRecoverAction chassis = MockChassis() mock_platform_name.return_value = 'invalid' info = ChassisInfo() info._chassis = chassis thermal_info_dict = {ChassisInfo.INFO_NAME: info} Thermal.expect_cooling_level = None action = ThermalRecoverAction() moc_get_min_allowed.return_value = 2 action.execute(thermal_info_dict) assert Thermal.expect_cooling_level == 6 Thermal.last_set_cooling_level = Thermal.expect_cooling_level Thermal.expect_cooling_level = None mock_platform_name.return_value = 'x86_64-mlnx_msn2700-r0' mock_check_trustable.return_value = 'trust' mock_get_min_amb.return_value = 29999 moc_get_min_allowed.return_value = None action.execute(thermal_info_dict) assert Thermal.expect_cooling_level is None moc_get_min_allowed.return_value = 4 action.execute(thermal_info_dict) assert Thermal.expect_cooling_level == 4 Thermal.last_set_cooling_level = Thermal.expect_cooling_level mock_check_trustable.return_value = 'untrust' mock_get_min_amb.return_value = 31001 action.execute(thermal_info_dict) assert Thermal.expect_cooling_level == 5
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_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 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_air_flow_direction = MagicMock(return_value=('p2c', 35000)) assert condition.is_match(None) assert MinCoolingLevelChangeCondition.trust_state == 'trust' assert MinCoolingLevelChangeCondition.air_flow_dir == 'p2c' 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_air_flow_direction = MagicMock(return_value=('c2p', 35000)) assert condition.is_match(None) assert MinCoolingLevelChangeCondition.air_flow_dir == 'c2p' Thermal.get_air_flow_direction = MagicMock(return_value=('c2p', 25000)) assert condition.is_match(None) assert MinCoolingLevelChangeCondition.temperature == 25 chassis = MockChassis() chassis.platform_name = 'invalid' info = ChassisInfo() info._chassis = chassis thermal_info_dict = {ChassisInfo.INFO_NAME: info} 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 chassis.platform_name = 'x86_64-mlnx_msn2700-r0' action.execute(thermal_info_dict) assert Fan.min_cooling_level == 4 Fan.set_cooling_level.assert_called_with(4, 5)