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