1*** Settings *** 2Documentation Validate IPMI sensor IDs using Redfish. 3 4Resource ../lib/ipmi_client.robot 5Resource ../lib/openbmc_ffdc.robot 6 7Suite Setup Redfish.Login 8Suite Teardown Redfish.Logout 9Test Setup Printn 10Test Teardown FFDC On Test Case Fail 11 12 13*** Variables *** 14${allowed_temp_diff} ${1} 15 16 17*** Test Cases *** 18 19Verify IPMI Temperature Readings using Redfish 20 [Documentation] Verify temperatures from IPMI sensor reading command using Redfish. 21 [Tags] Verify_IPMI_Temperature_Readings_using_Redfish 22 [Template] Get Temperature Reading And Verify In Redfish 23 24 # command_type sensor_id member_id 25 IPMI pcie pcie 26 IPMI ambient ambient 27 28 29Verify DCMI Temperature Readings using Redfish 30 [Documentation] Verify temperatures from DCMI sensor reading command using Redfish. 31 [Tags] Verify_DCMI_Temperature_Readings_using_Redfish 32 [Template] Get Temperature Reading And Verify In Redfish 33 34 # command_type sensor_id member_id 35 DCMI pcie pcie 36 DCMI ambient ambient 37 38 39Test Ambient Temperature Via IPMI 40 [Documentation] Test ambient temperature via IPMI and verify using Redfish. 41 [Tags] Test_Ambient_Temperature_Via_IPMI 42 43 # Example of IPMI dcmi get_temp_reading output: 44 # Entity ID Entity Instance Temp. Readings 45 # Inlet air temperature(40h) 1 +19 C 46 # CPU temperature sensors(41h) 5 +51 C 47 # CPU temperature sensors(41h) 6 +50 C 48 # CPU temperature sensors(41h) 7 +50 C 49 # CPU temperature sensors(41h) 8 +50 C 50 # CPU temperature sensors(41h) 9 +50 C 51 # CPU temperature sensors(41h) 10 +48 C 52 # CPU temperature sensors(41h) 11 +49 C 53 # CPU temperature sensors(41h) 12 +47 C 54 # CPU temperature sensors(41h) 8 +50 C 55 # CPU temperature sensors(41h) 16 +51 C 56 # CPU temperature sensors(41h) 24 +50 C 57 # CPU temperature sensors(41h) 32 +43 C 58 # CPU temperature sensors(41h) 40 +43 C 59 # Baseboard temperature sensors(42h) 1 +35 C 60 61 ${temp_reading}= Run IPMI Standard Command dcmi get_temp_reading -N 10 62 Should Contain ${temp_reading} Inlet air temperature 63 ... msg="Unable to get inlet temperature via DCMI". 64 65 ${ambient_temp_line}= 66 ... Get Lines Containing String ${temp_reading} 67 ... Inlet air temperature case-insensitive 68 69 ${ambient_temp_ipmi}= Set Variable ${ambient_temp_line.split('+')[1].strip(' C')} 70 71 # Example of ambient temperature via Redfish 72 73 #"@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Temperatures/0", 74 #"@odata.type": "#Thermal.v1_3_0.Temperature", 75 #"LowerThresholdCritical": 0.0, 76 #"LowerThresholdNonCritical": 0.0, 77 #"MaxReadingRangeTemp": 0.0, 78 #"MemberId": "ambient", 79 #"MinReadingRangeTemp": 0.0, 80 #"Name": "ambient", 81 #"ReadingCelsius": 24.987000000000002, 82 #"Status": { 83 #"Health": "OK", 84 #"State": "Enabled" 85 #}, 86 #"UpperThresholdCritical": 35.0, 87 #"UpperThresholdNonCritical": 25.0 88 89 ${ambient_temp_redfish}= Get Temperature Reading From Redfish ambient 90 91 ${ipmi_redfish_temp_diff}= 92 ... Evaluate abs(${ambient_temp_redfish} - ${ambient_temp_ipmi}) 93 94 Should Be True ${ipmi_redfish_temp_diff} <= ${allowed_temp_diff} 95 ... msg=Ambient temperature above allowed threshold ${allowed_temp_diff}. 96 97 98*** Keywords *** 99 100Get Temperature Reading And Verify In Redfish 101 [Documentation] Get IPMI or DCMI sensor reading and verify in Redfish. 102 [Arguments] ${command_type} ${sensor_id} ${member_id} 103 104 # Description of argument(s): 105 # command_type Type of command used to get sensor data (eg. IPMI, DCMI). 106 # sensor_id Sensor id used to get reading in IPMI or DCMI. 107 # member_id Member id of sensor data in Redfish. 108 109 ${ipmi_value}= Run Keyword If '${command_type}' == 'IPMI' Get IPMI Sensor Reading ${sensor_id} 110 ... ELSE Get DCMI Sensor Reading ${sensor_id} 111 112 ${redfish_value}= Get Temperature Reading From Redfish ${member_id} 113 114 Valid Range ${ipmi_value} ${redfish_value-1.000} ${redfish_value+1.000} 115 116 117Get IPMI Sensor Reading 118 [Documentation] Get reading from IPMI sensor reading command. 119 [Arguments] ${sensor_id} 120 121 # Description of argument(s): 122 # sensor_id Sensor id used to get reading in IPMI. 123 124 ${data}= Run IPMI Standard Command sensor reading ${sensor_id} 125 126 # Example reading: 127 # pcie | 28.500 128 129 ${sensor_value}= Set Variable ${data.split('| ')[1].strip()} 130 [Return] ${sensor_value} 131 132 133Get DCMI Sensor Reading 134 [Documentation] Get reading from DCMI sensors command. 135 [Arguments] ${sensor_id} 136 137 # Description of argument(s): 138 # sensor_id Sensor id used to get reading in DCMI. 139 140 ${data}= Run IPMI Standard Command dcmi sensors 141 ${sensor_data}= Get Lines Containing String ${data} ${sensor_id} 142 143 # Example reading: 144 # Record ID 0x00fd: pcie | 28.50 degrees C | ok 145 146 ${sensor_value}= Set Variable ${sensor_data.split(' | ')[1].strip('degrees C').strip()} 147 [Return] ${sensor_value} 148 149 150Get Temperature Reading From Redfish 151 [Documentation] Get temperature reading from Redfish. 152 [Arguments] ${member_id} 153 154 # Description of argument(s): 155 # member_id Member id of temperature. 156 157 @{redfish_readings}= Redfish.Get Attribute /redfish/v1/Chassis/chassis/Thermal Temperatures 158 FOR ${data} IN @{redfish_readings} 159 ${redfish_value}= Set Variable If '&{data}[MemberId]' == '${member_id}' 160 ... &{data}[ReadingCelsius] 161 Exit For Loop If '&{data}[MemberId]' == '${member_id}' 162 END 163 [Return] ${redfish_value}