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 15 16*** Variables *** 17 18# Timeout value in minutes. Default 3 minutes. 19${IPMI_POWEROFF_WAIT_TIMEOUT} 3 20${busctl_settings} xyz.openbmc_project.Settings 21${chassis_capabilities_dbus_URL} /xyz/openbmc_project/Control/ChassisCapabilities 22 23 24*** Test Cases *** 25 26IPMI Chassis Status On 27 [Documentation] This test case verifies system power on status 28 ... 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 37 [Documentation] This test case verifies system power off status 38 ... 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 45 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 60 Valid Value ipmi_state ['on'] 61 62 63Verify Soft Shutdown 64 [Documentation] Verify host OS shutdown softly via IPMI command. 65 [Tags] Verify_Soft_Shutdown 66 67 Redfish Power On stack_mode=skip 68 Run IPMI Standard Command chassis power soft 69 Wait Until Keyword Succeeds ${IPMI_POWEROFF_WAIT_TIMEOUT} min 10 sec Is Host Off Via IPMI 70 71 72Verify Chassis Power Cycle And Check Chassis Status Via IPMI 73 [Documentation] Verify chassis power Cycle operation and check the Chassis 74 ... Power Status using external IPMI command. 75 [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 84 [Documentation] Verify chassis power Reset operation and check the Chassis 85 ... Power Status using external IPMI command. 86 [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 94Verify 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 108Verify 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 122Verify 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 153*** 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 167Check 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 203Verify 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 215Test 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 221 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 233