blob: bea0a572d779bc14f224779249048c62b6362e63 [file] [log] [blame]
Tony Lee3a537b62021-04-01 14:49:43 +08001*** Settings ***
2Documentation Test Redfish sensor monitoring.
3
4Resource ../../lib/resource.robot
5Resource ../../lib/bmc_redfish_resource.robot
6Resource ../../lib/bmc_redfish_utils.robot
7Library ../../lib/gen_robot_print.py
8
9Test Setup Test Setup Execution
10Test Teardown Test Teardown Execution
11
12*** Variables ***
13
14@{INVALID_SENSORS}
15${OPENBMC_CONN_METHOD} ssh
16${IPMI_COMMAND} Inband
17
18** Test Cases **
19
20Verify Sensor Monitoring
21 [Documentation] Verify the redfish sensor monitoring according to the BMC
22 ... expected SDR table.
23 [Tags] Verify_Sensor_Monitoring
24
25 # Check whether the expected sensors are present in the Redfish request.
26 # Check whether the sensors's 'Health' is 'OK' and the 'State' is 'Enabled'.
27 # Check sensor reading is not equal to null.
28
29 ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}
30 ... valid_status_codes=[${HTTP_OK}]
31
32 Should Be Equal As Strings ${resp.dict['Sensors']['@odata.id']}
33 ... /redfish/v1/Chassis/${CHASSIS_ID}/Sensors
34 Should Be Equal As Strings ${resp.dict['Thermal']['@odata.id']}
35 ... /redfish/v1/Chassis/${CHASSIS_ID}/Thermal
36 Should Be Equal As Strings ${resp.dict['Power']['@odata.id']}
37 ... /redfish/v1/Chassis/${CHASSIS_ID}/Power
38
39 # Check sensors in /redfish/v1/Chassis/{ChassisId}/Power
40 ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}/Power
41 ... valid_status_codes=[${HTTP_OK}]
42
43 Check Sensors Present ${resp.dict['Voltages']} Voltage
44 Check Sensor Status And Reading Via Sensor Info
45 ... ${resp.dict['Voltages']} ReadingVolts
46
47 # Check sensors in /redfish/v1/Chassis/{ChassisId}/Thermal
48 ${resp}= Redfish.Get /redfish/v1/Chassis/${CHASSIS_ID}/Thermal
49 ... valid_status_codes=[${HTTP_OK}]
50
51 Check Sensors Present ${resp.dict['Temperatures']} Temperature
52 Check Sensors Present ${resp.dict['Fans']} Fans
53
54 Check Sensor Status And Reading Via Sensor Info
55 ... ${resp.dict['Temperatures']} ReadingCelsius
56 Check Sensor Status And Reading Via Sensor Info
57 ... ${resp.dict['Fans']} Reading
58
59 # Check sensors in
60 # /redfish/v1/Chassis/{ChassisId}/Sensors/{Sensor Name}
61 ${expected_current_power_sensor_name_list}= Set Variable
62 ... ${redfish_sensor_info_map['${OPENBMC_MODEL}']['Current_Power']}
63
64 FOR ${sensor_name} IN @{expected_current_power_sensor_name_list}
65 Check Sensor Status And Reading Via Sensor Name ${sensor_name}
66 END
67
68 Rprint Vars INVALID_SENSORS
69
70 ${error_msg}= Evaluate ", ".join(${INVALID_SENSORS})
71 Should Be Empty ${INVALID_SENSORS}
72 ... msg=Test fail, invalid sensors are ${error_msg}.
73
74
75*** Keywords ***
76
77Test Teardown Execution
78 [Documentation] Do the post test teardown.
79
80 Run Keyword And Ignore Error Redfish.Logout
81
82
83Test Setup Execution
84 [Documentation] Do the test setup.
85
86 Required Parameters For Sensor Monitoring
87 Redfish.Login
88
89
90Required Parameters For Sensor Monitoring
91 [Documentation] Check if required parameters are provided via command line.
92
93 Should Not Be Empty ${OS_HOST}
94 Should Not Be Empty ${OS_USERNAME}
95 Should Not Be Empty ${OS_PASSWORD}
96 Run Keyword If '${OPENBMC_CONN_METHOD}' == 'ssh'
97 ... Should Not Be Empty ${OPENBMC_HOST}
98 ... ELSE IF '${OPENBMC_CONN_METHOD}' == 'telnet'
99 ... Should Not Be Empty ${OPENBMC_SERIAL_HOST}
100 Should Not Be Empty ${OPENBMC_MODEL}
101
102
103Get Sensors Name List From Redfish
104 [Documentation] Get sensors name list from redfish.
105 [Arguments] ${sensor_info_list}
106 # Description of arguments:
107 # sensor_info_list A list of a specified sensor info return by a redfish
108 # request.
109
110 # An example of a sensor redfish request:
111 # /redfish/v1/Chassis/${CHASSIS_ID}/Power
112 # {
113 # ...
114 # "Voltages": [
115 # {
116 # "@odata.id": "/redfish/v1/Chassis/${CHASSIS_ID}/Power#/Voltages/0",
117 # "@odata.type": "#Power.v1_0_0.Voltage",
118 # "LowerThresholdCritical": 1.14,
119 # "LowerThresholdNonCritical": 1.14,
120 # "MaxReadingRange": 2.0,
121 # "MemberId": "Output_Voltage",
122 # "MinReadingRange": 0.0,
123 # "Name": "Output Voltage",
124 # "ReadingVolts": 1.176,
125 # "Status": {
126 # "Health": "OK",
127 # "State": "Enabled"
128 # },
129 # "UpperThresholdCritical": 1.21,
130 # "UpperThresholdNonCritical": 1.21
131 # }
132 # ...
133 # }
134
135 @{sensor_name_list}= Create List
136 FOR ${sensor_info} IN @{sensor_info_list}
137 Append To List ${sensor_name_list} ${sensor_info['MemberId']}
138 END
139
140 [Return] ${sensor_name_list}
141
142
143Check Sensor Status And Reading Via Sensor Name
144 [Documentation] Check Sensor Status And Reading Via Sensor Name.
145 [Arguments] ${sensor_name}
146 # Description of arguments:
147 # sensor_name Sensor that should be present.
148
149 ${resp}= Redfish.Get
150 ... /redfish/v1/Chassis/${CHASSIS_ID}/Sensors/${sensor_name}
151 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
152
153 Run Keyword And Return If '${resp.status}' == '${HTTP_NOT_FOUND}'
154 ... Append To List ${INVALID_SENSORS} ${sensor_name}
155
156 ${condition_str}= Catenate
157 ... '${resp.dict['Status']['Health']}' != 'OK'
158 ... or '${resp.dict['Status']['State']}' != 'Enabled'
159 ... or ${resp.dict['Reading']} == ${null}
160
161 Run Keyword If ${condition_str}
162 ... Append To List ${INVALID_SENSORS} ${sensor_name}
163
164
165Check Sensor Status And Reading Via Sensor Info
166 [Documentation] Check Sensor Status And Reading Via Sensor Info.
167 [Arguments] ${sensor_info_list} ${reading_unit}
168 # Description of arguments:
169 # sensor_info_list A list of a specified sensor info return by a redfish
170 # request.
171 # reading_unit A string represents the reading value in sensor info
172 # return by a redfish request. It different between
173 # different sensor unit of sensor info.
174
175 FOR ${sensor_info} IN @{sensor_info_list}
176 ${sensor}= Set Variable ${sensor_info['MemberId']}
177 ${condition_str}= Catenate
178 ... '${sensor_info['Status']['Health']}' != 'OK'
179 ... or '${sensor_info['Status']['State']}' != 'Enabled'
180 ... or ${sensor_info['${reading_unit}']} == ${null}
181
182 Run Keyword If ${condition_str}
183 ... Append To List ${INVALID_SENSORS} ${sensor_info['MemberId']}
184 END
185
186
187Check Sensors Present
188 [Documentation] Check that sensors are present as expected.
189 [Arguments] ${sensor_info_list} ${sensor_type}
190 # Description of arguments:
191 # sensor_info_list A list of a specified sensor info return by a redfish
192 # request.
193 # sensor_type A string represents the sensor category to be verified.
194
195 # An example table of expected sensors:
196 # redfish_sensor_info_map = {
197 # ${OPENBMC_MODEL}:{
198 # "Voltage":{
199 # "Voltage0",
200 # ...
201 # },
202 # "Temperature":{
203 # "DIMM0",
204 # ...
205 # }
206 # "Fans":{
207 # "Fan0",
208 # ...
209 # }...
210 # }
211 #}
212
213 ${curr_sensor_name_list}= Get Sensors Name List From Redfish
214 ... ${sensor_info_list}
215
216 ${expected_sensor_name_list}= Set Variable
217 ... ${redfish_sensor_info_map['${OPENBMC_MODEL}']['${sensor_type}']}
218
219 FOR ${sensor_name} IN @{expected_sensor_name_list}
220 ${exist}= Evaluate '${sensor_name}' in ${curr_sensor_name_list}
221 Run Keyword If '${exist}' == '${False}'
222 ... Append To List ${INVALID_SENSORS} ${sensor_name}
223 END