1*** Settings *** 2 3Documentation Module to test IPMI asset tag functionality. 4Resource ../lib/ipmi_client.robot 5Resource ../lib/openbmc_ffdc.robot 6Resource ../lib/bmc_network_utils.robot 7Variables ../data/ipmi_raw_cmd_table.py 8Variables ../data/ipmi_variable.py 9Library ../lib/bmc_network_utils.py 10Library ../lib/ipmi_utils.py 11 12Suite Setup IPMI General Test Suite Setup 13Test Teardown FFDC On Test Case Fail 14 15*** Test Cases *** 16 17Test Get Self Test Results via IPMI Raw Command 18 [Documentation] Get self test results via IPMI raw command and verify the output. 19 [Tags] Test_Get_Self_Test_Results_via_IPMI_Raw_Command 20 21 ${resp}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Self_Test_Results']['Get'][0]} 22 23 # 55h = No error. All Self Tests Passed. 24 # 56h = Self Test function not implemented in this controller. 25 Should Contain Any ${resp} 55 00 56 00 26 27 28Test Get Device GUID Via IPMI Raw Command 29 [Documentation] Get device GUID via IPMI raw command and verify it using Redfish. 30 [Tags] Test_Get_Device_GUID_Via_IPMI_Raw_Command 31 [Teardown] Run Keywords Redfish.Logout AND FFDC On Test Case Fail 32 # Get GUIDS via IPMI. 33 # This should match the /redfish/v1/Managers/bmc's UUID data. 34 ${guids}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Device GUID']['Get'][0]} 35 # Reverse the order and remove space delims. 36 ${guids}= Split String ${guids} 37 Reverse List ${guids} 38 ${guids}= Evaluate "".join(${guids}) 39 40 Redfish.Login 41 ${uuid}= Redfish.Get Attribute /redfish/v1/Managers/bmc UUID 42 ${uuid}= Remove String ${uuid} - 43 44 Rprint Vars guids uuid 45 Valid Value uuid ['${guids}'] 46 47 48Verify Get Channel Info via IPMI 49 [Documentation] Verify get channel info via IPMI. 50 [Tags] Verify_Get_Channel_Info_via_IPMI 51 52 # Get channel info via ipmi command "ipmitool channel info [channel number]". 53 # Verify channel info with files "channel_access_volatile.json", "channel_access_nv.json" 54 # and "channel_config.json" in BMC. 55 56 # Example output from 'Get Channel Info': 57 # channel_info: 58 # [channel_0x2_info]: 59 # [channel_medium_type]: 802.3 LAN 60 # [channel_protocol_type]: IPMB-1.0 61 # [session_support]: multi-session 62 # [active_session_count]: 0 63 # [protocol_vendor_id]: 7154 64 # [volatile(active)_settings]: 65 # [alerting]: enabled 66 # [per-message_auth]: enabled 67 # [user_level_auth]: enabled 68 # [access_mode]: always available 69 # [Non-Volatile Settings]: 70 # [alerting]: enabled 71 # [per-message_auth]: enabled 72 # [user_level_auth]: enabled 73 # [access_mode]: always available 74 75 ${channel_info_ipmi}= Get Channel Info ${CHANNEL_NUMBER} 76 ${active_channel_config}= Get Active Channel Config 77 ${channel_volatile_data_config}= Get Channel Access Config /run/ipmi/channel_access_volatile.json 78 ${channel_nv_data_config}= Get Channel Access Config /var/lib/ipmi/channel_access_nv.json 79 80 Rprint Vars channel_info_ipmi 81 Rprint Vars active_channel_config 82 Rprint Vars channel_volatile_data_config 83 Rprint Vars channel_nv_data_config 84 85 Valid Value medium_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_medium_type']}'] 86 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['medium_type']}'] 87 88 Valid Value protocol_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_protocol_type']}'] 89 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['protocol_type']}'] 90 91 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['session_support'] 92 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['session_supported']}'] 93 94 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['active_session_count'] 95 ... ['${active_channel_config['${CHANNEL_NUMBER}']['active_sessions']}'] 96 # IPMI Spec: The IPMI Enterprise Number is: 7154 (decimal) 97 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['protocol_vendor_id'] ['7154'] 98 99 # Verify volatile(active)_settings 100 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['alerting']}'] 101 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}'] 102 103 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['per-message_auth']}'] 104 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}'] 105 106 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['user_level_auth']}'] 107 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}'] 108 109 Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['access_mode']}'] 110 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['access_mode']}'] 111 112 # Verify Non-Volatile Settings 113 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['alerting']}'] 114 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}'] 115 116 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['per-message_auth']}'] 117 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}'] 118 119 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['user_level_auth']}'] 120 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}'] 121 122 Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['access_mode']}'] 123 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['access_mode']}'] 124 125 126Test Get Channel Authentication Capabilities via IPMI 127 [Documentation] Verify channel authentication capabilities via IPMI. 128 [Tags] Test_Get_Channel_Authentication_Capabilities_via_IPMI 129 [Template] Verify Channel Auth Capabilities 130 131 FOR ${channel} IN @{active_channel_list} 132 FOR ${privilege} IN 4 3 2 133 # Input Channel Privilege Level 134 ${channel} ${privilege} 135 END 136 END 137 138 139Test Get Channel Authentication Capabilities IPMI Command For Invalid Channel 140 [Documentation] Verify get channel authentication capabilities for invalid channel. 141 [Tags] Test_Get_Channel_Authentication_Capabilities_IPMI_Command_For_Invalid_Channel 142 [Template] Verify Channel Auth Capabilities For Invalid Channel 143 144 FOR ${channel} IN @{inactive_channel_list} 145 # Input Channel 146 ${channel} 147 END 148 149 150Verify Get Channel Authentication Capabilities IPMI Raw Command With Invalid Data Length 151 [Documentation] Verify get channel authentication capabilities IPMI raw command with invalid data length. 152 [Tags] Verify_Get_Channel_Authentication_Capabilities_IPMI_Raw_Command_With_Invalid_Data_Length 153 [Template] Verify Channel Auth Command For Invalid Data Length 154 155 # Bytes 156 low 157 high 158 159 160Verify Set Session Privilege Level via IPMI Raw Command 161 [Documentation] Set session privilege with given privilege level and verify the response with 162 ... expected level. 163 [Tags] Verify_Set_Session_Privilege_Level_via_IPMI_Raw_Command 164 [Template] Set Session Privilege Level And Verify 165 166 # privilege_level expected_level 167 0x00 04 168 0x02 02 169 0x03 03 170 0x04 04 171 172 173Verify Set Invalid Session Privilege Level Via IPMI Raw Command 174 [Documentation] Verify set invalid session privilege level via IPMI raw command. 175 [Tags] Verify_Set_Invalid_Session_Privilege_Level_Via_IPMI_Raw_Command 176 [Template] Set Invalid Session Privilege Level And Verify 177 178 # invalid_privilege_level 179 0x05 180 0x06 181 0x07 182 0x0F 183 184 185Verify Close Session Via IPMI 186 [Documentation] Verify close session via IPMI. 187 [Tags] Verify_Close_Session_Via_IPMI 188 189 # The "close session command" can be tested with any out-of-band IPMI command. 190 # When the session is about to close, it will execute the close session command at the end. 191 192 ${cmd}= Catenate mc info -vvv 2>&1 | grep "Closed Session" 193 ${cmd_output}= Run External IPMI Standard Command ${cmd} 194 195 Should Contain ${cmd_output} Closed Session 196 197 198Verify Chassis Identify via IPMI 199 [Documentation] Set chassis identify using IPMI and verify. 200 [Tags] Verify_Chassis_Identify_via_IPMI 201 [Setup] Redfish.Login 202 [Teardown] Redfish.logout 203 204 # Set to default "chassis identify" and verify that LED blinks for 15s. 205 Run IPMI Standard Command chassis identify 206 Verify Identify LED State Via Redfish Lit 207 208 Sleep 18s 209 Verify Identify LED State Via Redfish Off 210 211 # Set "chassis identify" to 10s and verify that the LED blinks for 10s. 212 Run IPMI Standard Command chassis identify 10 213 Verify Identify LED State Via Redfish Lit 214 215 Sleep 12s 216 Verify Identify LED State Via Redfish Off 217 218 219Verify Chassis Identify Off And Force Identify On via IPMI 220 [Documentation] Set chassis identify to "off" and "force" using IPMI and verify. 221 [Tags] Verify_Chassis_Identify_Off_And_Force_Identify_On_via_IPMI 222 [Setup] Redfish.Login 223 [Teardown] Redfish.logout 224 225 # Set the LED to "Force Identify On". 226 Run IPMI Standard Command chassis identify force 227 Verify Identify LED State Via Redfish Lit 228 229 # Set "chassis identify" to 0 and verify that the LED turns off. 230 Run IPMI Standard Command chassis identify 0 231 Verify Identify LED State Via Redfish Off 232 233 234*** Keywords *** 235 236IPMI General Test Suite Setup 237 [Documentation] Get active and inactive/invalid channels from channel_config.json file 238 ... in list type and set it as suite variable. 239 240 # Get active channel list and set as suite variable. 241 @{active_channel_list}= Get Active Ethernet Channel List 242 Set Suite Variable @{active_channel_list} 243 244 # Get Inactive/Invalid channel list and set as suite variable. 245 @{inactive_channel_list}= Get Invalid Channel Number List 246 Set Suite Variable @{inactive_channel_list} 247 248 249Set Session Privilege Level And Verify 250 [Documentation] Set session privilege with given privilege level and verify the response with 251 ... expected level. 252 [Arguments] ${privilege_level} ${expected_level} 253 # Description of argument(s): 254 # privilege_level Requested Privilege Level. 255 # expected_level New Privilege Level (or present level if ‘return present privilege level’ 256 # was selected). 257 258 ${resp}= Run External IPMI Raw Command 259 ... 0x06 0x3b ${privilege_level} 260 Should Contain ${resp} ${expected_level} 261 262 263Set Invalid Session Privilege Level And Verify 264 [Documentation] Set invalid session privilege level and verify the response. 265 [Arguments] ${privilege_level} 266 # Description of argument(s): 267 # privilege_level Requested Privilege Level. 268 269 # Verify requested level exceeds Channel and/or User Privilege Limit. 270 ${msg}= Run Keyword And Expect Error * Run External IPMI Raw Command 271 ... 0x06 0x3b ${privilege_level} 272 Should Contain ${msg} Unknown rsp=0x81 273 274 275Verify Identify LED State Via Redfish 276 [Documentation] Verify that Redfish identify LED system with given state. 277 [Arguments] ${expected_state} 278 # Description of argument(s): 279 # expected_led_status Expected value of Identify LED. 280 281 # Get the following URI(s) and iterate to find the attribute IndicatorLED. 282 # Example: 283 # /redfish/v1/Systems/system 284 # /redfish/v1/Systems/hypervisor 285 286 # Python module: get_member_list(resource_path) 287 ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems 288 FOR ${system} IN @{systems} 289 ${led_value}= Redfish.Get Attribute ${system} IndicatorLED 290 # Get attribute return None if IndicatorLED does not exist in the URI. 291 Continue For Loop If '${led_value}' == 'None' 292 Should Be True '${led_value}' == '${expected_state}' 293 END 294 295 296Verify Channel Auth Capabilities 297 [Documentation] Verify authentication capabilities for given channel and privilege. 298 [Arguments] ${channel} ${privilege_level} 299 300 # Description of argument(s): 301 # channel Interface channel number. 302 # privilege_level User Privilege level (e.g. 4-Administator, 3-Operator, 2-Readonly). 303 304 # Python module: get_channel_auth_capabilities(channel_number, privilege_level) 305 ${channel_auth_cap}= Get Channel Auth Capabilities ${channel} ${privilege_level} 306 Rprint Vars channel_auth_cap 307 308 Valid Value channel_auth_cap['channel_number'] ['${channel}'] 309 Valid Value channel_auth_cap['kg_status'] ['default (all zeroes)'] 310 Valid Value channel_auth_cap['per_message_authentication'] ['enabled'] 311 Valid Value channel_auth_cap['user_level_authentication'] ['enabled'] 312 Valid Value channel_auth_cap['non-null_user_names_exist'] ['yes'] 313 Valid Value channel_auth_cap['null_user_names_exist'] ['no'] 314 Valid Value channel_auth_cap['anonymous_login_enabled'] ['no'] 315 Valid Value channel_auth_cap['channel_supports_ipmi_v1.5'] ['no'] 316 Valid Value channel_auth_cap['channel_supports_ipmi_v2.0'] ['yes'] 317 318 319Verify Channel Auth Capabilities For Invalid Channel 320 [Documentation] Verify authentication capabilities of invalid channels. 321 [Arguments] ${channel} 322 323 # Description of argument(s): 324 # channel Interface channel number. 325 326 ${channel_in_hex}= Convert To Hex ${channel} prefix=0x 327 ${cmd}= Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${channel_in_hex} 0x04 328 329 Verify Invalid IPMI Command ${cmd} 0xcc 330 331 332Verify Channel Auth Command For Invalid Data Length 333 [Documentation] Verify channel authentication command for invalid data length. 334 [Arguments] ${byte_length} 335 336 # Description of argument(s): 337 # byte_length high or low. 338 # e.g. high - add extra byte to request data like "0x06 0x38 0x01 0x04 0x01". 339 # low - reduce bytes in actual request data like "0x06 0x38". 340 341 ${req_cmd}= Run Keyword If '${byte_length}' == 'low' 342 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} 343 ... ELSE 344 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} 0x04 0x01 345 346 Verify Invalid IPMI Command ${req_cmd} 0xc7 347