blob: 5e6db282e27da2eb8ffaddd116f025588bfae35e [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
24Library Collections
25Library ../lib/ipmi_utils.py
26Resource ../lib/ipmi_client.robot
27Resource ../lib/openbmc_ffdc.robot
28Variables ../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
32
33*** Variables ***
34
35${NETWORK_RESTART_TIME} 30s
36@{thresholds_list} lcr lnc unc ucr
37
38
39*** Test Cases ***
40
41Cold Reset Via IPMI
42 [Documentation] Verify Cold Reset via IPMI.
43 [Tags] Cold_Reset_Via_IPMI
44
45 # Cold Reset Via IPMI raw command.
46 Run External IPMI Raw Command ${IPMI_RAW_CMD['Cold Reset']['reset'][0]}
47
48 # Get the BMC Status.
49 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Unpingable
50 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Operational
51
52 # Verify if BMC restarted with Get Device ID command.
53
54 ${resp}= Run External IPMI Raw Command ${IPMI_RAW_CMD['Device ID']['Get'][0]}
55 Should Not Contain ${resp} ${IPMI_RAW_CMD['Device ID']['Get'][1]}
56
57
58Cold Reset With Invalid Data Request Via IPMI
59 [Documentation] Verify Cold Reset with invalid data request via IPMI.
60 [Tags] Cold_Reset_With_Invalid_Data_Request_Via_IPMI
61
62 # Verify cold reset with invalid length of the request data and expect error.
63 ${resp}= Run Keyword and Expect Error *Request data length invalid*
64 ... Run External IPMI Raw Command ${IPMI_RAW_CMD['Cold Reset']['reset'][0]} 0x00
65
66
67Verify Cold Reset Impact On Sensor Threshold Via IPMI
68 [Documentation] Modify sensor threshold, perform cold reset,
69 ... and verify if sensor threshold reverts back to initial value.
70 [Tags] Verify_Cold_Reset_Impact_On_Sensor_Threshold_Via_IPMI
71
72 # Get sensor list.
73 ${Sensor_list}= Get Sensor List
74
75 # Get initial sensor threshold readings.
chithrag6b279b32022-05-05 08:28:05 +000076 ${initial_sensor_threshold} ${sensor_name}= Get The Sensor Name And Threshold ${sensor_list}
chithragff43db92022-03-01 13:13:48 +000077
78 # Identify sensor threshold values to modify.
George Keishing30ef8b82022-05-06 09:15:04 -050079 ${threshold_list} ${threshold_dict}= Identify Sensor Threshold Values ${initial_sensor_threshold}
chithragff43db92022-03-01 13:13:48 +000080
81 # Set sensor threshold for given sensor and compare with initial reading.
George Keishing30ef8b82022-05-06 09:15:04 -050082 ${set_sensor_threshold}= Set Sensor Threshold For given Sensor
83 ... ${threshold_dict} ${sensor_name}
chithragff43db92022-03-01 13:13:48 +000084 Should Not Be Equal ${set_sensor_threshold} ${initial_sensor_threshold}
85
86 # Execute cold reset command via IPMI and check status.
87 Run External IPMI Raw Command ${IPMI_RAW_CMD['Cold Reset']['reset'][0]}
88 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Unpingable
89 Wait Until Keyword Succeeds 3 min 10 sec Is BMC Operational
90
91 # Get sensor data for the sensor identified.
92 ${data_after_coldreset}= Wait Until Keyword Succeeds 2 min 30 sec
93 ... Run IPMI Standard Command sensor | grep -i RPM | grep "${sensor_name}"
94
95 # Get sensor threshold readings after BMC restarts.
George Keishing6e641262022-05-05 10:46:22 -050096 ${sensor_threshold_after_reset} ${sensor_name_after_reset}=
97 ... Get The Sensor Name And Threshold ${data_after_coldreset}
chithragff43db92022-03-01 13:13:48 +000098
99 # Compare with initial sensor threshold values.
100 Should Be Equal ${sensor_threshold_after_reset} ${initial_sensor_threshold}
101
102
103*** Keywords ***
104
105Get Sensor List
106 [Documentation] To get the list of sensors via IPMI sensor list.
107
108 # BMC may take time to populate all the sensors once BMC Cold reset completes.
109 ${data}= Wait Until Keyword Succeeds 2 min 30 sec
110 ... Run IPMI Standard Command sensor | grep -i RPM
111
112 [Return] ${data}
113
114Identify Sensor
chithrag6b279b32022-05-05 08:28:05 +0000115 [Documentation] To fetch first sensor listed from sensor list IPMI command and return the sensor.
chithragff43db92022-03-01 13:13:48 +0000116 [Arguments] ${data}
117
chithragff43db92022-03-01 13:13:48 +0000118 # Description of Argument(s):
chithrag6b279b32022-05-05 08:28:05 +0000119 # ${data} All the sensors listed with ipmi sensor list command.
120
121 # Find Sensor detail of sensor list first entry.
122
chithragff43db92022-03-01 13:13:48 +0000123 ${data}= Split To Lines ${data}
124 ${data}= Set Variable ${data[0]}
125
126 [Return] ${data}
127
128
chithrag6b279b32022-05-05 08:28:05 +0000129Get The Sensor Reading And Name
chithragff43db92022-03-01 13:13:48 +0000130 [Documentation] To get the sensor reading of the given sensor using IPMI.
131 [Arguments] ${Sensors_all}
132
chithragff43db92022-03-01 13:13:48 +0000133 # Description of Argument(s):
chithrag6b279b32022-05-05 08:28:05 +0000134 # ${Sensors_all} All the sensors listed with ipmi sensor list command.
135
136 # Split Sensor details in a list.
137
chithragff43db92022-03-01 13:13:48 +0000138 ${sensor}= Identify Sensor ${Sensors_all}
139 ${data}= Split String ${sensor} |
140
141 # Locate the sensor name.
142 ${sensor_name}= Set Variable ${data[0]}
143 # Function defined in lib/utils.py.
144 ${sensor_name}= Remove Whitespace ${sensor_name}
145
146 [Return] ${data} ${sensor_name}
147
148
chithrag6b279b32022-05-05 08:28:05 +0000149Get The Sensor Name And Threshold
chithragff43db92022-03-01 13:13:48 +0000150 [Documentation] To get the sensor threshold for given sensor using IPMI.
151 [Arguments] ${Sensor_list}
152
153 # Description of Argument(s):
154 # ${Sensor_list} All the sensors listed with ipmi sensor list command.
155
156 # Gets the sensor data and sensor name for the required sensor.
chithrag6b279b32022-05-05 08:28:05 +0000157 ${data} ${sensor_name}= Get The Sensor Reading And Name ${Sensor_list}
chithragff43db92022-03-01 13:13:48 +0000158 # Gets the threshold values in a list.
159 ${threshold}= Set Variable ${data[5:9]}
160
161 [Return] ${threshold} ${sensor_name}
162
163
164Identify Sensor Threshold Values
165 [Documentation] Identify New Sensor Threshold Values with adding 100 to old threshold values.
166 [Arguments] ${old_threshold}
167
168 # Description of Argument(s):
169 # ${old_threshold} original threshold values list of the given sensor.
170
171 # Retrieves modified threshold values of the original threshold value.
George Keishing30ef8b82022-05-06 09:15:04 -0500172 ${threshold_list} ${threshold_dict}= Modify And Fetch Threshold ${old_threshold} ${thresholds_list}
chithragff43db92022-03-01 13:13:48 +0000173
George Keishing30ef8b82022-05-06 09:15:04 -0500174 [Return] ${threshold_list} ${threshold_dict}
chithragff43db92022-03-01 13:13:48 +0000175
176
177Set Sensor Threshold For given Sensor
George Keishing6e641262022-05-05 10:46:22 -0500178 [Documentation] Set Sensor Threshold for given sensor with given Upper and Lower critical
179 ... and non-critical values Via IPMI.
George Keishing30ef8b82022-05-06 09:15:04 -0500180 [Arguments] ${threshold_dict} ${sensor}
chithragff43db92022-03-01 13:13:48 +0000181
182 # Description of Argument(s):
George Keishing30ef8b82022-05-06 09:15:04 -0500183 # ${threshold_dict} New thresholds dictionary to be set
184 # E.g. {'lcr': 2600, 'lnc': 'na', 'unc': 'na', 'ucr': 12200}
chithrag6b279b32022-05-05 08:28:05 +0000185 # ${sensor} Sensor name, eg: SENSOR_1, FAN_1
186
187 # The return data will be newly set threshold value for the given sensor.
chithragff43db92022-03-01 13:13:48 +0000188
189 # Set critical and non-critical values for the given sensor.
George Keishing30ef8b82022-05-06 09:15:04 -0500190 FOR ${criticals} IN @{threshold_dict}
chithragff43db92022-03-01 13:13:48 +0000191 # Set Lower/Upper critical and non-critical values if a threshold is available.
George Keishing30ef8b82022-05-06 09:15:04 -0500192 Run keyword if '${threshold_dict['${criticals}']}' != 'na'
chithragff43db92022-03-01 13:13:48 +0000193 ... Run IPMI Standard Command
George Keishing30ef8b82022-05-06 09:15:04 -0500194 ... sensor thresh "${sensor}" ${criticals} ${threshold_dict['${criticals}']}
chithragff43db92022-03-01 13:13:48 +0000195 # Allow Network restart sleep time for the readings to get reflected.
196 Sleep ${NETWORK_RESTART_TIME}
197 END
198
199 # Get sensor list for the sensor name identified.
200 ${data}= Wait Until Keyword Succeeds 2 min 30 sec
201 ... Run IPMI Standard Command sensor | grep -i RPM | grep "${sensor}"
202
203 # Get new threshold value set from sensor list.
chithrag6b279b32022-05-05 08:28:05 +0000204 ${threshold_new} ${sensor_name}= Get The Sensor Name And Threshold ${data}
chithragff43db92022-03-01 13:13:48 +0000205
206 [Return] ${threshold_new}