blob: 1a4b5d9940c48065dda39c8d97090f9591b2862e [file] [log] [blame]
chithragff43db92022-03-01 13:13:48 +00001*** Settings ***
2Documentation This suite tests IPMI Cold Reset in OpenBMC.
3...
4... The Cold reset command directs the Responder to perform
5... a 'Cold Reset' action, which causes default setting of
6... interrupt enables, event message generation,sensor scanning,
7... threshold values, and other 'power up' default state to be restored.
8...
9... The script consist of 3 testcases:
10... - Cold_Reset_Via_IPMI
11... - Cold_Reset_With_Invalid_Data_Request_Via_IPMI
12... - Verify_Cold_Reset_Impact_On_Sensor_Threshold_Via_IPMI
13...
chithragff43db92022-03-01 13:13:48 +000014... The script verifies command execution for cold reset,
15... invalid data request verification of cold reset and
16... impact on sensor threshold value change with cold reset.
17...
18... The script changes sensor threshold value for Fan sensor,
19... executes cold reset IPMI command,
20... compares sensor threshold values of initial and reading after cold reset.
chithrag6b279b32022-05-05 08:28:05 +000021...
22... Request data for cold reset present under data/ipmi_raw_cmd_table.py
chithragff43db92022-03-01 13:13:48 +000023
chithragff43db92022-03-01 13:13:48 +000024Resource ../lib/ipmi_client.robot
25Resource ../lib/openbmc_ffdc.robot
ganesanbd0c4b802023-04-28 18:29:38 +000026Library Collections
27Library ../lib/ipmi_utils.py
chithragff43db92022-03-01 13:13:48 +000028Variables ../data/ipmi_raw_cmd_table.py
29
chithrag6b279b32022-05-05 08:28:05 +000030Test Teardown FFDC On Test Case Fail
chithragff43db92022-03-01 13:13:48 +000031
George Keishing87dc4422023-10-20 12:56:30 +053032Force Tags IPMI_Cold_Reset
chithragff43db92022-03-01 13:13:48 +000033
34*** Variables ***
35
36${NETWORK_RESTART_TIME} 30s
37@{thresholds_list} lcr lnc unc ucr
38
39
40*** Test Cases ***
41
42Cold Reset Via IPMI
43 [Documentation] Verify Cold Reset via IPMI.
44 [Tags] Cold_Reset_Via_IPMI
45
46 # Cold Reset Via IPMI raw command.
47 Run External IPMI Raw Command ${IPMI_RAW_CMD['Cold Reset']['reset'][0]}
48
49 # Get the BMC Status.
50 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Unpingable
51 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Operational
52
53 # Verify if BMC restarted with Get Device ID command.
54
55 ${resp}= Run External IPMI Raw Command ${IPMI_RAW_CMD['Device ID']['Get'][0]}
56 Should Not Contain ${resp} ${IPMI_RAW_CMD['Device ID']['Get'][1]}
57
58
59Cold Reset With Invalid Data Request Via IPMI
60 [Documentation] Verify Cold Reset with invalid data request via IPMI.
61 [Tags] Cold_Reset_With_Invalid_Data_Request_Via_IPMI
62
63 # Verify cold reset with invalid length of the request data and expect error.
64 ${resp}= Run Keyword and Expect Error *Request data length invalid*
65 ... Run External IPMI Raw Command ${IPMI_RAW_CMD['Cold Reset']['reset'][0]} 0x00
66
67
68Verify Cold Reset Impact On Sensor Threshold Via IPMI
69 [Documentation] Modify sensor threshold, perform cold reset,
70 ... and verify if sensor threshold reverts back to initial value.
71 [Tags] Verify_Cold_Reset_Impact_On_Sensor_Threshold_Via_IPMI
72
73 # Get sensor list.
ganesanb29a24212022-05-11 19:49:40 +053074 ${sensor_list}= Get Sensor List
chithragff43db92022-03-01 13:13:48 +000075
76 # Get initial sensor threshold readings.
ganesanb29a24212022-05-11 19:49:40 +053077 ${sensor_name} ${sensor_threshold}= Get The Sensor Name And Threshold ${sensor_list}
chithragff43db92022-03-01 13:13:48 +000078
ganesanb29a24212022-05-11 19:49:40 +053079 ${threshold_key_list}= Get Dictionary Keys ${sensor_threshold}
80 ${random_threshold_key}= Evaluate random.choice(${threshold_key_list}) random
chithragff43db92022-03-01 13:13:48 +000081
ganesanb29a24212022-05-11 19:49:40 +053082 ${old_threshold_value}= Get From Dictionary ${sensor_threshold} ${random_threshold_key}
chithragff43db92022-03-01 13:13:48 +000083
ganesanb29a24212022-05-11 19:49:40 +053084 # Modify Default Threshold Value For An Sensor To Set An New Threshold Value
85 ${new_settable_threshold_value}= Modify Default Sensor Threshold Value ${old_threshold_value}
86
87 # Set/Get sensor threshold for given sensor and compare with initial reading.
88 ${new_threshold_value}= Set And Get Sensor Threshold For given Sensor ${sensor_name} ${random_threshold_key}
89 ... ${new_settable_threshold_value}
90
91 Should Not Be Equal ${new_threshold_value} ${old_threshold_value}
92
93 # Cold Reset Via IPMI raw command.
chithragff43db92022-03-01 13:13:48 +000094 Run External IPMI Raw Command ${IPMI_RAW_CMD['Cold Reset']['reset'][0]}
ganesanb29a24212022-05-11 19:49:40 +053095
96 # Get the BMC Status.
chithragff43db92022-03-01 13:13:48 +000097 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Unpingable
ganesanb29a24212022-05-11 19:49:40 +053098 Wait Until Keyword Succeeds 10 min 10 sec Is BMC Operational
chithragff43db92022-03-01 13:13:48 +000099
100 # Get sensor data for the sensor identified.
101 ${data_after_coldreset}= Wait Until Keyword Succeeds 2 min 30 sec
ganesanb29a24212022-05-11 19:49:40 +0530102 ... Run IPMI Standard Command sensor | grep -i "${sensor_name}"
chithragff43db92022-03-01 13:13:48 +0000103
104 # Get sensor threshold readings after BMC restarts.
ganesanb29a24212022-05-11 19:49:40 +0530105 ${threshold_value_after_reset}= Getting Sensor Threshold Value Based On Threshold Key ${random_threshold_key} ${sensor_name}
chithragff43db92022-03-01 13:13:48 +0000106
107 # Compare with initial sensor threshold values.
ganesanb29a24212022-05-11 19:49:40 +0530108 Should Be Equal ${threshold_value_after_reset} ${old_threshold_value}
chithragff43db92022-03-01 13:13:48 +0000109
110*** Keywords ***
111
112Get Sensor List
113 [Documentation] To get the list of sensors via IPMI sensor list.
114
115 # BMC may take time to populate all the sensors once BMC Cold reset completes.
116 ${data}= Wait Until Keyword Succeeds 2 min 30 sec
ganesanb29a24212022-05-11 19:49:40 +0530117 ... Run IPMI Standard Command sensor
chithragff43db92022-03-01 13:13:48 +0000118
119 [Return] ${data}
120
chithrag6b279b32022-05-05 08:28:05 +0000121Get The Sensor Name And Threshold
chithragff43db92022-03-01 13:13:48 +0000122 [Documentation] To get the sensor threshold for given sensor using IPMI.
ganesanb29a24212022-05-11 19:49:40 +0530123 [Arguments] ${sensor_list}
chithragff43db92022-03-01 13:13:48 +0000124
125 # Description of Argument(s):
ganesanb29a24212022-05-11 19:49:40 +0530126 # ${sensor_list} All the sensors listed with ipmi sensor list command.
chithragff43db92022-03-01 13:13:48 +0000127
ganesanb29a24212022-05-11 19:49:40 +0530128 @{tmp_list}= Create List
chithragff43db92022-03-01 13:13:48 +0000129
ganesanb29a24212022-05-11 19:49:40 +0530130 @{sensor_list_lines}= Split To Lines ${sensor_list}
chithragff43db92022-03-01 13:13:48 +0000131
ganesanb29a24212022-05-11 19:49:40 +0530132 # Omit the discrete sensor and create an threshold sensor name list
133 FOR ${sensor} IN @{sensor_list_lines}
134 ${discrete_sensor_status}= Run Keyword And Return Status Should Contain ${sensor} discrete
135 Continue For Loop If '${discrete_sensor_status}' == 'True'
136 ${sensor_details}= Split String ${sensor} |
137 ${get_sensor_name}= Get From List ${sensor_details} 0
138 ${sensor_name}= Set Variable ${get_sensor_name.strip()}
139 Append To List ${tmp_list} ${sensor_name}
chithragff43db92022-03-01 13:13:48 +0000140 END
141
ganesanb29a24212022-05-11 19:49:40 +0530142 ${sensor_count}= Get Length ${tmp_list}
chithragff43db92022-03-01 13:13:48 +0000143
ganesanb29a24212022-05-11 19:49:40 +0530144 FOR ${RANGE} IN RANGE 0 ${sensor_count}
145 ${random_sensor} ${sensor_threshold}= Selecting Random Sensor Name And Threshold Value ${tmp_list} ${sensor_list}
146 ${threshold_dict_count}= Get Length ${sensor_threshold}
147 Exit For Loop If '${threshold_dict_count}' != '0'
148 Remove Values From List ${tmp_list} ${random_sensor}
149 END
chithragff43db92022-03-01 13:13:48 +0000150
ganesanb29a24212022-05-11 19:49:40 +0530151 [Return] ${random_sensor} ${sensor_threshold}
152
153Selecting Random Sensor Name And Threshold Value
154 [Documentation] Select Random Sensor Name And Threshold Values.
155 [Arguments] ${tmp_list} ${sensor_list}
156
157 # Selecting random sensors from sensor list
158 ${random_sensor_name}= Evaluate random.choice(${tmp_list}) random
159
160 # Create Dictionary For Threshold Key With Threshold Values
161 &{tmp_dict}= Create Dictionary
162 ${sensor_threshold}= Get Lines Containing String ${sensor_list} ${random_sensor_name}
163 @{ipmi_sensor}= Split String ${sensor_threshold} |
164 ${get_ipmi_lower_non_recoverable_threshold}= Get From List ${ipmi_sensor} 4
165 ${ipmi_lower_non_recoverable_threshold}= Set Variable ${get_ipmi_lower_non_recoverable_threshold.strip()}
166 ${lower_non_recoverable_threshold_status}= Run Keyword And Return Status Should Not Contain
167 ... ${ipmi_lower_non_recoverable_threshold} na
168 Run Keyword If '${lower_non_recoverable_threshold_status}' == 'True'
169 ... Set To Dictionary ${tmp_dict} lnr ${ipmi_lower_non_recoverable_threshold}
170
171 ${get_ipmi_lower_critical_threshold}= Get From List ${ipmi_sensor} 5
172 ${ipmi_lower_critical_threshold}= Set Variable ${get_ipmi_lower_critical_threshold.strip()}
173 ${lower_critical_threshold_status}= Run Keyword And Return Status Should Not Contain
174 ... ${ipmi_lower_critical_threshold} na
175 Run Keyword If '${lower_critical_threshold_status}' == 'True'
176 ... Set To Dictionary ${tmp_dict} lcr ${ipmi_lower_critical_threshold}
177
178 ${get_ipmi_lower_non_critical_threshold}= Get From List ${ipmi_sensor} 6
179 ${ipmi_lower_non_critical_threshold}= Set Variable ${get_ipmi_lower_non_critical_threshold.strip()}
180 ${lower_non_critical_threshold_status}= Run Keyword And Return Status Should Not Contain
181 ... ${ipmi_lower_non_critical_threshold} na
182 Run Keyword If '${lower_non_critical_threshold_status}' == 'True'
183 ... Set To Dictionary ${tmp_dict} lnc ${ipmi_lower_non_critical_threshold}
184
185 ${get_ipmi_upper_non_critical_threshold}= Get From List ${ipmi_sensor} 7
186 ${ipmi_upper_non_critical_threshold}= Set Variable ${get_ipmi_upper_non_critical_threshold.strip()}
187 ${upper_non_critical_threshold_status}= Run Keyword And Return Status Should Not Contain
188 ... ${ipmi_upper_non_critical_threshold} na
189 Run Keyword If '${upper_non_critical_threshold_status}' == 'True'
190 ... Set To Dictionary ${tmp_dict} unc ${ipmi_upper_non_critical_threshold}
191
192 ${get_ipmi_upper_critical_threshold}= Get From List ${ipmi_sensor} 8
193 ${ipmi_upper_critical_threshold}= Set Variable ${get_ipmi_upper_critical_threshold.strip()}
194 ${upper_critical_threshold_status}= Run Keyword And Return Status Should Not Contain
195 ... ${ipmi_upper_critical_threshold} na
196 Run Keyword If '${upper_critical_threshold_status}' == 'True'
197 ... Set To Dictionary ${tmp_dict} ucr ${ipmi_upper_critical_threshold}
198
199 ${get_ipmi_upper_non_recoverable_threshold}= Get From List ${ipmi_sensor} 9
200 ${ipmi_upper_non_recoverable_threshold}= Set Variable ${get_ipmi_upper_non_recoverable_threshold.strip()}
201 ${upper_non_recoverable_threshold_status}= Run Keyword And Return Status Should Not Contain
202 ... ${ipmi_upper_non_recoverable_threshold} na
203 Run Keyword If '${upper_non_recoverable_threshold_status}' == 'True'
204 ... Set To Dictionary ${tmp_dict} unr ${ipmi_upper_non_recoverable_threshold}
205
206 [Return] ${random_sensor_name} ${tmp_dict}
207
208Modify Default Sensor Threshold Value
209 [Documentation] Modify Default Sensor Threshold Value with adding 100 to old threshold values.
210 [Arguments] ${old_threshold}
211
212 ${new_threshold}= Evaluate ${old_threshold} + 100
213
214 [Return] ${new_threshold}
215
216Set And Get Sensor Threshold For given Sensor
217 [Documentation] Set/Get Sensor Threshold for given sensor Via IPMI.
218 [Arguments] ${sensor_name} ${random_threshold_key} ${new_settable_threshold_value}
219
220 # Set New Threshold Value To The Randomly Selected Sensor.
221 Run IPMI Standard Command sensor thresh "${sensor_name}" ${random_threshold_key} ${new_settable_threshold_value}
222
223 Sleep 10s
224
225 ${sensor_new_threshold_value}= Getting Sensor Threshold Value Based On Threshold Key ${random_threshold_key} ${sensor_name}
226
227 [Return] ${sensor_new_threshold_value}
228
229Getting Sensor Threshold Value Based On Threshold Key
230 [Documentation] Getting Particular Sensor Threshold Value Based On Sensor Name And Threshold Key.
231 [Arguments] ${threshold_key} ${sensor_name}
232
233 # After Setting Threshold Value, Get New Sensor Threshold Value.
234 ${new_data}= Run IPMI Standard Command sensor | grep -i "${sensor_name}"
235 ${new_sensor_details}= Split String ${new_data} |
236
237 ${index_value}= Set Variable If
238 ... '${threshold_key}' == 'lnr' ${4}
239 ... '${threshold_key}' == 'lcr' ${5}
240 ... '${threshold_key}' == 'lnc' ${6}
241 ... '${threshold_key}' == 'unc' ${7}
242 ... '${threshold_key}' == 'ucr' ${8}
243 ... '${threshold_key}' == 'unr' ${9}
244
245 ${get_sensor_new_threshold_value}= Get From List ${new_sensor_details} ${index_value}
246 ${sensor_new_threshold_value}= Set Variable ${get_sensor_new_threshold_value.strip()}
247
248 [Return] ${sensor_new_threshold_value}