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