blob: 1c9f030701d60070a9b169335e68ca1319dcd347 [file] [log] [blame]
Rahul Maheshwari07d91d22019-07-31 01:12:05 -05001*** Settings ***
2
3Documentation Module to test IPMI chassis functionality.
4Resource ../lib/ipmi_client.robot
5Resource ../lib/openbmc_ffdc.robot
George Keishing6f395fd2021-08-18 02:18:53 -05006Resource ../lib/boot_utils.robot
Nagarjun B1499c912023-05-27 22:13:20 +05307Resource ../lib/bmc_dbus.robot
Rahul Maheshwarif724a002020-02-21 05:17:02 -06008Library ../lib/ipmi_utils.py
chithragf4595402022-03-30 16:35:03 +00009Variables ../data/ipmi_raw_cmd_table.py
Rahul Maheshwari07d91d22019-07-31 01:12:05 -050010
George Keishing2d0edad2021-08-18 11:44:10 -050011Suite Setup Redfish.Login
12Suite Teardown Redfish.Logout
chithragf4595402022-03-30 16:35:03 +000013Test Teardown Test Teardown Execution
14
Nagarjun B1499c912023-05-27 22:13:20 +053015
George Keishingf6280172022-07-08 01:51:27 -050016*** Variables ***
17
18# Timeout value in minutes. Default 3 minutes.
Nagarjun B1499c912023-05-27 22:13:20 +053019${IPMI_POWEROFF_WAIT_TIMEOUT} 3
20${busctl_settings} xyz.openbmc_project.Settings
21${chassis_capabilities_dbus_URL} /xyz/openbmc_project/Control/ChassisCapabilities
22
Rahul Maheshwari07d91d22019-07-31 01:12:05 -050023
24*** Test Cases ***
25
26IPMI Chassis Status On
George Keishinge16f1582022-12-15 07:32:21 -060027 [Documentation] This test case verifies system power on status
Rahul Maheshwari07d91d22019-07-31 01:12:05 -050028 ... using IPMI Get Chassis status command.
29 [Tags] IPMI_Chassis_Status_On
30
31 Redfish Power On stack_mode=skip quiet=1
32 ${resp}= Run IPMI Standard Command chassis status
33 ${power_status}= Get Lines Containing String ${resp} System Power
34 Should Contain ${power_status} on
35
36IPMI Chassis Status Off
George Keishinge16f1582022-12-15 07:32:21 -060037 [Documentation] This test case verifies system power off status
Rahul Maheshwari07d91d22019-07-31 01:12:05 -050038 ... using IPMI Get Chassis status command.
39 [Tags] IPMI_Chassis_Status_Off
40
41 Redfish Power Off stack_mode=skip quiet=1
42 ${resp}= Run IPMI Standard Command chassis status
43 ${power_status}= Get Lines Containing String ${resp} System Power
44 Should Contain ${power_status} off
Sushma M M1cc21272020-01-05 23:47:46 -060045
46Verify Host PowerOff Via IPMI
47 [Documentation] Verify host power off operation using external IPMI command.
48 [Tags] Verify_Host_PowerOff_Via_IPMI
49
50 IPMI Power Off
51 ${ipmi_state}= Get Host State Via External IPMI
52 Valid Value ipmi_state ['off']
53
54Verify Host PowerOn Via IPMI
55 [Documentation] Verify host power on operation using external IPMI command.
56 [Tags] Verify_Host_PowerOn_Via_IPMI
57
58 IPMI Power On
59 ${ipmi_state}= Get Host State Via External IPMI
Rahul Maheshwari460778d2020-02-23 22:37:22 -060060 Valid Value ipmi_state ['on']
61
62
63Verify Soft Shutdown
64 [Documentation] Verify host OS shutdown softly via IPMI command.
George Keishingfba5ad92021-11-08 02:52:35 -060065 [Tags] Verify_Soft_Shutdown
Rahul Maheshwari460778d2020-02-23 22:37:22 -060066
67 Redfish Power On stack_mode=skip
68 Run IPMI Standard Command chassis power soft
George Keishingf6280172022-07-08 01:51:27 -050069 Wait Until Keyword Succeeds ${IPMI_POWEROFF_WAIT_TIMEOUT} min 10 sec Is Host Off Via IPMI
Rahul Maheshwari460778d2020-02-23 22:37:22 -060070
Rahul Maheshwarif724a002020-02-21 05:17:02 -060071
chithragf4595402022-03-30 16:35:03 +000072Verify Chassis Power Cycle And Check Chassis Status Via IPMI
George Keishing6e641262022-05-05 10:46:22 -050073 [Documentation] Verify chassis power Cycle operation and check the Chassis
74 ... Power Status using external IPMI command.
chithragf4595402022-03-30 16:35:03 +000075 [Tags] Verify_Chassis_Power_Cycle_And_Check_Chassis_Status_Via_IPMI
76
77 # Chassis power cycle command via IPMI
78 IPMI Power Cycle
79 ${ipmi_state}= Get Host State Via External IPMI
80 Valid Value ipmi_state ['on']
81
82
83Verify Chassis Power Reset And Check Chassis Status Via IPMI
George Keishing6e641262022-05-05 10:46:22 -050084 [Documentation] Verify chassis power Reset operation and check the Chassis
85 ... Power Status using external IPMI command.
chithragf4595402022-03-30 16:35:03 +000086 [Tags] Verify_Chassis_Power_Reset_And_Check_Chassis_Status_Via_IPMI
87
88 # Chassis power reset command via IPMI
89 IPMI Power Reset
90 ${ipmi_state}= Get Host State Via External IPMI
91 Valid Value ipmi_state ['on']
92
93
Rahul Maheshwarif724a002020-02-21 05:17:02 -060094Verify Chassis Power Policy
95 [Documentation] Verify setting chassis power policy via IPMI command.
96 [Tags] Verify_Chassis_Power_Policy
97 [Setup] Test Setup Execution
98 [Teardown] Run Keywords FFDC On Test Case Fail AND
99 ... Run IPMI Standard Command chassis policy ${initial_power_policy}
100 [Template] Set Chassis Power Policy Via IPMI And Verify
101
102 # power_policy
103 always-off
104 always-on
105 previous
106
107
chithragf4595402022-03-30 16:35:03 +0000108Verify Chassis Status Via IPMI
109 [Documentation] Verify Chassis Status via IPMI command.
110 [Tags] Verify_Chassis_Status_Via_IPMI
111 [Setup] Test Setup Execution
112 [Teardown] Run Keywords FFDC On Test Case Fail AND
113 ... Run IPMI Standard Command chassis policy ${initial_power_policy}
114 [Template] Check Chassis Status Via IPMI
115
116 # power_policy
117 always-off
118 always-on
119 previous
120
121
Nagarjun B1499c912023-05-27 22:13:20 +0530122Verify Get Chassis Capabilities
123 [Documentation] Verify get chassis capabilities IPMI cmd with valid data length and verify
124 ... its response comparing with busctl command.
125 [Tags] Verify_Get_Chassis_Capabilities
126 [Teardown] FFDC On Test Case Fail
127
128 ${ipmi_resp}= Run External IPMI Raw Command
129 ... ${IPMI_RAW_CMD['Chassis Capabilities']['Get'][0]}
130
131 ${ipmi_resp}= Split String ${ipmi_resp}
132 ${busctl_cmd}= Catenate ${BUSCTL_INTROSPECT_COMMAND} ${busctl_settings}
133 ... ${chassis_capabilities_dbus_URL}
134
135 ${busctl_resp}= BMC Execute Command sh --login -c "${busctl_cmd}"
136
137 Verify Chassis Capabilities Response ${ipmi_resp[0]} ${busctl_resp[0]} CapabilitiesFlags
138 Verify Chassis Capabilities Response ${ipmi_resp[1]} ${busctl_resp[0]} FRUDeviceAddress
139 Verify Chassis Capabilities Response ${ipmi_resp[2]} ${busctl_resp[0]} SDRDeviceAddress
140 Verify Chassis Capabilities Response ${ipmi_resp[3]} ${busctl_resp[0]} SELDeviceAddress
141 Verify Chassis Capabilities Response ${ipmi_resp[4]} ${busctl_resp[0]} SMDeviceAddress
142 Verify Chassis Capabilities Response ${ipmi_resp[5]} ${busctl_resp[0]} BridgeDeviceAddress
143
144
145Verify Get Chassis Capabilities With Invalid Data Length
146 [Documentation] Verify get chassis capabilities IPMI command with invalid data length
147 [Tags] Verify_Get_Chassis_Capabilities_With_Invalid_Data_Length
148 [Teardown] FFDC On Test Case Fail
149
150 Verify Invalid IPMI Command ${IPMI_RAW_CMD['Chassis Capabilities']['Get'][1]} 0xc7
151
152
Rahul Maheshwarif724a002020-02-21 05:17:02 -0600153*** Keywords ***
154
155Set Chassis Power Policy Via IPMI And Verify
156 [Documentation] Set chasiss power policy via IPMI and verify.
157 [Arguments] ${power_policy}
158
159 # Description of argument(s):
160 # power_policy Chassis power policy to be set(e.g. "always-off", "always-on").
161
162 Run IPMI Standard Command chassis policy ${power_policy}
163 ${resp}= Get Chassis Status
164 Valid Value resp['power_restore_policy'] ['${power_policy}']
165
166
chithragf4595402022-03-30 16:35:03 +0000167Check Chassis Status Via IPMI
168 [Documentation] Set Chassis Status via IPMI and verify and verify chassis status.
169 [Arguments] ${power_policy}
170
171 # Sets power policy according to requested policy
172 Set Chassis Power Policy Via IPMI And Verify ${power_policy}
173
174 # Gets chassis status via IPMI raw command and validate byte 1
175 ${status}= Run External IPMI Raw Command ${IPMI_RAW_CMD['Chassis_status']['get'][0]}
176 ${status}= Split String ${status}
177 ${state}= Convert To Binary ${status[0]} base=16
178 ${state}= Zfill Data ${state} 8
179
180 # Last bit corresponds whether Power is on
181 Should Be Equal As Strings ${state[-1]} 1
182 # bit 1-2 corresponds to power restore policy
183 ${policy}= Set Variable ${state[1:3]}
184
185 # condition to verify each power policy
186 IF '${power_policy}' == 'always-off'
187 Should Be Equal As Strings ${policy} 00
188 ELSE IF '${power_policy}' == 'always-on'
189 Should Be Equal As Strings ${policy} 10
190 ELSE IF '${power_policy}' == 'previous'
191 Should Be Equal As Strings ${policy} 01
192 ELSE
193 Log Power Restore Policy is Unknown
194 Should Be Equal As Strings ${policy} 11
195 END
196
197 # Last Power Event - 4th bit should be 1b i.e, last ‘Power is on’ state was entered via IPMI command
198 ${last_power_event}= Convert To Binary ${status[1]} base=16
199 ${last_power_event}= Zfill Data ${last_power_event} 8
200 Should Be Equal As Strings ${last_power_event[3]} 1
201
202
Nagarjun B1499c912023-05-27 22:13:20 +0530203Verify Chassis Capabilities Response
204 [Documentation] Will compare the ipmi response with thh busctl response for given property.
205 [Arguments] ${ipmi_response} ${busctl_response} ${property}
206
207 ${ipmi_response}= Convert To Integer ${ipmi_response} 16
208
209 ${busctl_value}= Get Regexp Matches ${busctl_response}
210 ... \\.${property}\\s+property\\s+\\w\\s+(\\d+)\\s+ 1
211
212 Should Be Equal As Integers ${ipmi_response} ${busctl_value[0]}
213
214
Rahul Maheshwarif724a002020-02-21 05:17:02 -0600215Test Setup Execution
216 [Documentation] Do test setup tasks.
217
218 ${chassis_status}= Get Chassis Status
219 Set Test Variable ${initial_power_policy} ${chassis_status['power_restore_policy']}
220
chithragf4595402022-03-30 16:35:03 +0000221
222Test Teardown Execution
223 [Documentation] Do Test Teardown tasks.
224
225 ${resp}= Run IPMI Standard Command chassis status
226 ${power_status}= Get Lines Containing String ${resp} System Power
227 @{powertolist}= Split String ${power_status} :
228 ${status}= Get From List ${powertolist} 1
229 # Chassis Power ON if status is off
230 Run Keyword If '${status.strip()}' != 'on'
231 ... Redfish Power On
232 FFDC On Test Case Fail