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