*** Settings *** Documentation Module to test IPMI asset tag functionality. Resource ../lib/ipmi_client.robot Resource ../lib/openbmc_ffdc.robot Resource ../lib/bmc_network_utils.robot Variables ../data/ipmi_raw_cmd_table.py Variables ../data/ipmi_variable.py Library ../lib/bmc_network_utils.py Library ../lib/ipmi_utils.py Suite Setup IPMI General Test Suite Setup Test Teardown FFDC On Test Case Fail *** Test Cases *** Verify Get DCMI Capabilities [Documentation] Verify get DCMI capabilities command output. [Tags] Verify_Get_DCMI_Capabilities ${cmd_output}= Run IPMI Standard Command dcmi discover @{supported_capabilities}= Create List # Supported DCMI capabilities: ... Mandatory platform capabilties ... Optional platform capabilties ... Power management available ... Managebility access capabilties ... In-band KCS channel available # Mandatory platform attributes: ... 200 SEL entries ... SEL automatic rollover is enabled # Optional Platform Attributes: ... Slave address of device: 0h (8bits)(Satellite/External controller) ... Channel number is 0h (Primary BMC) ... Device revision is 0 # Manageability Access Attributes: ... Primary LAN channel number: 1 is available ... Secondary LAN channel is not available for OOB ... No serial channel is available FOR ${capability} IN @{supported_capabilities} Should Contain ${cmd_output} ${capability} ignore_case=True ... msg=Supported DCMI capabilities not present. END Test Get Self Test Results via IPMI Raw Command [Documentation] Get self test results via IPMI raw command and verify the output. [Tags] Test_Get_Self_Test_Results_via_IPMI_Raw_Command ${resp}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Self_Test_Results']['Get'][0]} # 55h = No error. All Self Tests Passed. # 56h = Self Test function not implemented in this controller. Should Contain Any ${resp} 55 00 56 00 Test Get Device GUID Via IPMI Raw Command [Documentation] Get device GUID via IPMI raw command and verify it using Redfish. [Tags] Test_Get_Device_GUID_Via_IPMI_Raw_Command [Teardown] Run Keywords Redfish.Logout AND FFDC On Test Case Fail # Get GUIDS via IPMI. # This should match the /redfish/v1/Managers/bmc's UUID data. ${guids}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Device GUID']['Get'][0]} # Reverse the order and remove space delims. ${guids}= Split String ${guids} Reverse List ${guids} ${guids}= Evaluate "".join(${guids}) Redfish.Login ${uuid}= Redfish.Get Attribute /redfish/v1/Managers/bmc UUID ${uuid}= Remove String ${uuid} - Rprint Vars guids uuid Valid Value uuid ['${guids}'] Verify Get Channel Info via IPMI [Documentation] Verify get channel info via IPMI. [Tags] Verify_Get_Channel_Info_via_IPMI # Get channel info via ipmi command "ipmitool channel info [channel number]". # Verify channel info with files "channel_access_volatile.json", "channel_access_nv.json" # and "channel_config.json" in BMC. # Example output from 'Get Channel Info': # channel_info: # [channel_0x2_info]: # [channel_medium_type]: 802.3 LAN # [channel_protocol_type]: IPMB-1.0 # [session_support]: multi-session # [active_session_count]: 0 # [protocol_vendor_id]: 7154 # [volatile(active)_settings]: # [alerting]: enabled # [per-message_auth]: enabled # [user_level_auth]: enabled # [access_mode]: always available # [Non-Volatile Settings]: # [alerting]: enabled # [per-message_auth]: enabled # [user_level_auth]: enabled # [access_mode]: always available ${channel_info_ipmi}= Get Channel Info ${CHANNEL_NUMBER} ${active_channel_config}= Get Active Channel Config ${channel_volatile_data_config}= Get Channel Access Config /run/ipmi/channel_access_volatile.json ${channel_nv_data_config}= Get Channel Access Config /var/lib/ipmi/channel_access_nv.json Rprint Vars channel_info_ipmi Rprint Vars active_channel_config Rprint Vars channel_volatile_data_config Rprint Vars channel_nv_data_config Valid Value medium_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_medium_type']}'] ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['medium_type']}'] Valid Value protocol_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_protocol_type']}'] ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['protocol_type']}'] Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['session_support'] ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['session_supported']}'] Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['active_session_count'] ... ['${active_channel_config['${CHANNEL_NUMBER}']['active_sessions']}'] # IPMI Spec: The IPMI Enterprise Number is: 7154 (decimal) Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['protocol_vendor_id'] ['7154'] # Verify volatile(active)_settings Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['alerting']}'] ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}'] Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['per-message_auth']}'] ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}'] Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['user_level_auth']}'] ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}'] Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['access_mode']}'] ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['access_mode']}'] # Verify Non-Volatile Settings Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['alerting']}'] ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}'] Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['per-message_auth']}'] ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}'] Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['user_level_auth']}'] ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}'] Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['access_mode']}'] ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['access_mode']}'] Test Get Channel Authentication Capabilities via IPMI [Documentation] Verify channel authentication capabilities via IPMI. [Tags] Test_Get_Channel_Authentication_Capabilities_via_IPMI [Template] Verify Channel Auth Capabilities FOR ${channel} IN @{active_channel_list} FOR ${privilege} IN 4 3 2 # Input Channel Privilege Level ${channel} ${privilege} END END Test Get Channel Authentication Capabilities IPMI Command For Invalid Channel [Documentation] Verify get channel authentication capabilities for invalid channel. [Tags] Test_Get_Channel_Authentication_Capabilities_IPMI_Command_For_Invalid_Channel [Template] Verify Channel Auth Capabilities For Invalid Channel FOR ${channel} IN @{inactive_channel_list} # Input Channel ${channel} END Verify Get Channel Authentication Capabilities IPMI Raw Command With Invalid Data Length [Documentation] Verify get channel authentication capabilities IPMI raw command with invalid data length. [Tags] Verify_Get_Channel_Authentication_Capabilities_IPMI_Raw_Command_With_Invalid_Data_Length [Template] Verify Channel Auth Command For Invalid Data Length # Bytes low high Verify Set Session Privilege Level via IPMI Raw Command [Documentation] Set session privilege with given privilege level and verify the response with ... expected level. [Tags] Verify_Set_Session_Privilege_Level_via_IPMI_Raw_Command [Template] Set Session Privilege Level And Verify # privilege_level expected_level 0x00 04 0x02 02 0x03 03 0x04 04 Verify Set Invalid Session Privilege Level Via IPMI Raw Command [Documentation] Verify set invalid session privilege level via IPMI raw command. [Tags] Verify_Set_Invalid_Session_Privilege_Level_Via_IPMI_Raw_Command [Template] Set Invalid Session Privilege Level And Verify # invalid_privilege_level 0x05 0x06 0x07 0x0F Verify Close Session Via IPMI [Documentation] Verify close session via IPMI. [Tags] Verify_Close_Session_Via_IPMI # The "close session command" can be tested with any out-of-band IPMI command. # When the session is about to close, it will execute the close session command at the end. ${cmd}= Catenate mc info -vvv 2>&1 | grep "Closed Session" ${cmd_output}= Run External IPMI Standard Command ${cmd} Should Contain ${cmd_output} Closed Session Verify Chassis Identify via IPMI [Documentation] Set chassis identify using IPMI and verify. [Tags] Verify_Chassis_Identify_via_IPMI [Setup] Redfish.Login [Teardown] Redfish.logout # Set to default "chassis identify" and verify that LED blinks for 15s. Run IPMI Standard Command chassis identify Verify Identify LED State Via Redfish Lit Sleep 18s Verify Identify LED State Via Redfish Off # Set "chassis identify" to 10s and verify that the LED blinks for 10s. Run IPMI Standard Command chassis identify 10 Verify Identify LED State Via Redfish Lit Sleep 12s Verify Identify LED State Via Redfish Off Verify Chassis Identify Off And Force Identify On via IPMI [Documentation] Set chassis identify to "off" and "force" using IPMI and verify. [Tags] Verify_Chassis_Identify_Off_And_Force_Identify_On_via_IPMI [Setup] Redfish.Login [Teardown] Redfish.logout # Set the LED to "Force Identify On". Run IPMI Standard Command chassis identify force Verify Identify LED State Via Redfish Lit # Set "chassis identify" to 0 and verify that the LED turns off. Run IPMI Standard Command chassis identify 0 Verify Identify LED State Via Redfish Off *** Keywords *** IPMI General Test Suite Setup [Documentation] Get active and inactive/invalid channels from channel_config.json file ... in list type and set it as suite variable. # Get active channel list and set as suite variable. @{active_channel_list}= Get Active Ethernet Channel List Set Suite Variable @{active_channel_list} # Get Inactive/Invalid channel list and set as suite variable. @{inactive_channel_list}= Get Invalid Channel Number List Set Suite Variable @{inactive_channel_list} Set Session Privilege Level And Verify [Documentation] Set session privilege with given privilege level and verify the response with ... expected level. [Arguments] ${privilege_level} ${expected_level} # Description of argument(s): # privilege_level Requested Privilege Level. # expected_level New Privilege Level (or present level if ‘return present privilege level’ # was selected). ${resp}= Run External IPMI Raw Command ... 0x06 0x3b ${privilege_level} Should Contain ${resp} ${expected_level} Set Invalid Session Privilege Level And Verify [Documentation] Set invalid session privilege level and verify the response. [Arguments] ${privilege_level} # Description of argument(s): # privilege_level Requested Privilege Level. # Verify requested level exceeds Channel and/or User Privilege Limit. ${msg}= Run Keyword And Expect Error * Run External IPMI Raw Command ... 0x06 0x3b ${privilege_level} Should Contain ${msg} Unknown rsp=0x81 Verify Identify LED State Via Redfish [Documentation] Verify that Redfish identify LED system with given state. [Arguments] ${expected_state} # Description of argument(s): # expected_led_status Expected value of Identify LED. # Python module: get_member_list(resource_path) ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems FOR ${system} IN @{systems} ${led_value}= Redfish.Get Attribute ${system} IndicatorLED Should Be True '${led_value}' == '${expected_state}' END Verify Channel Auth Capabilities [Documentation] Verify authentication capabilities for given channel and privilege. [Arguments] ${channel} ${privilege_level} # Description of argument(s): # channel Interface channel number. # privilege_level User Privilege level (e.g. 4-Administator, 3-Operator, 2-Readonly). # Python module: get_channel_auth_capabilities(channel_number, privilege_level) ${channel_auth_cap}= Get Channel Auth Capabilities ${channel} ${privilege_level} Rprint Vars channel_auth_cap Valid Value channel_auth_cap['channel_number'] ['${channel}'] Valid Value channel_auth_cap['kg_status'] ['default (all zeroes)'] Valid Value channel_auth_cap['per_message_authentication'] ['enabled'] Valid Value channel_auth_cap['user_level_authentication'] ['enabled'] Valid Value channel_auth_cap['non-null_user_names_exist'] ['yes'] Valid Value channel_auth_cap['null_user_names_exist'] ['no'] Valid Value channel_auth_cap['anonymous_login_enabled'] ['no'] Valid Value channel_auth_cap['channel_supports_ipmi_v1.5'] ['no'] Valid Value channel_auth_cap['channel_supports_ipmi_v2.0'] ['yes'] Verify Channel Auth Capabilities For Invalid Channel [Documentation] Verify authentication capabilities of invalid channels. [Arguments] ${channel} # Description of argument(s): # channel Interface channel number. ${channel_in_hex}= Convert To Hex ${channel} prefix=0x ${cmd}= Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${channel_in_hex} 0x04 Verify Invalid IPMI Command ${cmd} 0xcc Verify Channel Auth Command For Invalid Data Length [Documentation] Verify channel authentication command for invalid data length. [Arguments] ${byte_length} # Description of argument(s): # byte_length high or low. # e.g. high - add extra byte to request data like "0x06 0x38 0x01 0x04 0x01". # low - reduce bytes in actual request data like "0x06 0x38". ${req_cmd}= Run Keyword If '${byte_length}' == 'low' ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} ... ELSE ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} 0x04 0x01 Verify Invalid IPMI Command ${req_cmd} 0xc7