blob: c21ee6bdf57e2dc9f6d029a8053e8c8e711fbec3 [file] [log] [blame]
*** Settings ***
Documentation Module to test dcmi management controller functionality.
Resource ../../lib/ipmi_client.robot
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/bmc_network_utils.robot
Resource ../../lib/boot_utils.robot
Resource ../../lib/bmc_redfish_utils.robot
Variables ../../data/ipmi_raw_cmd_table.py
Variables ../../data/dcmi_raw_cmd_table.py
Variables ../../data/ipmi_variable.py
Library ../../lib/ipmi_utils.py
Library ../../lib/utilities.py
Library ../../lib/utils.py
Library JSONLibrary
Force Tags DCMI_Management_Controller
*** Variables ***
${hostname_file_path} /etc/hostname
*** Test Cases ***
Validate IPMI Response Length
[Documentation] Check ipmi response length.
[Tags] Validate_IPMI_Response_Length
${rsp}= Get DCMI Management Controller Identifier String
@{ipmi_cmd_rsp_list}= Split String ${rsp}
# ipmi_cmd_rsp_list = ["00", "0a", "00", "01", "02", "03",
# "04", "05", "06", "07", "08", "09"]
# rsp_length = 10
# string_length = 0a
${rsp_length}= Get Length ${ipmi_cmd_rsp_list[2:]}
${string_length}= Get Response Length In Hex ${rsp_length}
# ipmi_cmd_rsp_list[1] = 0a
# string_length = 0a
# the above condition is equal.
# suppose if string_length and ipmi_cmd_rsp_list[1] not matches
# then it will fails.
Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length}
... msg=Id string length in ipmi response is showing wrongly
Test Hostname Is Same With Management Controller Identifier String
[Documentation] Check hostname was verified with get management
... controller identifier string.
[Tags] Test_Hostname_Is_Same_With_Management_Controller_Identifier_String
${rsp}= Get DCMI Management Controller Identifier String
@{ipmi_cmd_rsp_list}= Split String ${rsp}
${bmc_console_hostname_bytes_list}= Get Hostname From BMC Console
Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${bmc_console_hostname_bytes_list}
... msg=response get from dcmi get mcid cmd and hostname from "cat /etc/os-release" cmd is not same.
Test Get Management Controller Identifier String
[Documentation] Validate set and get mcid string.
[Tags] Test_Get_Management_Controller_Identifier_String
[Setup] Get Default MCID
[Teardown] Set Default MCID
# Set Hostname via DCMI Management Controller Identifier String Command.
${cmd_rsp}= Set DCMI Management Controller Identifier String
@{cmd_rsp_list}= Split String ${cmd_rsp}
Run Keyword And Continue On Failure
... Valid Value cmd_rsp_list[1] valid_values=['${number_of_bytes_to_write}']
${rsp}= Get DCMI Management Controller Identifier String
@{ipmi_cmd_rsp_list}= Split String ${rsp}
# Verify number of bytes that was set and id string length are same.
${string_length}= Get Response Length In Hex ${random_int}
Run Keyword And Continue On Failure
... Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length}
... msg=Number of bytes that was set and id string length are not same.
# Verify ID String Length and data.
# ipmi_cmd_rsp_list = ["00", "0a", "00", "01", "02", "03", "04",
# "05", "06", "07", "08", "09"]
# rsp_length = 10
# string_length = 0a
# ipmi_cmd_rsp_list[1] = 0a
# ipmi_cmd_rsp_list[1] is equal to string_length
# the above condition is equal.
# suppose if string_length and ipmi_cmd_rsp_list[1] not matches then
# it will fails.
${rsp_length}= Get Length ${ipmi_cmd_rsp_list[2:]}
${string_length}= Get Response Length In Hex ${rsp_length}
Run Keyword And Continue On Failure
... Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length}
... msg=Id string length in ipmi response is showing wrongly
# Verify get dcmi management controller identifier string command response
# and the bytes used for Set DCMI MCID string.
${set_dcmi_mcid_cmd}=
... convert_prefix_hex_list_to_non_prefix_hex_list ${string_hex_list}
Run Keyword And Continue On Failure
... Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${set_dcmi_mcid_cmd}
... msg=Bytes given in dcmi set mcid command and string bytes got from dcmi get mcid command are not same
# Verify Hostname of cat /etc/hostname and get dcmi management controller identifier string command.
${bytes_list}= Get Hostname From BMC Console
Run Keyword And Continue On Failure
... Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${bytes_list}
... msg=Bytes got from dcmi get mcid command and hostname from "cat /etc/os-release" command is not same.
*** Keywords ***
Get Default MCID
[Documentation] Get default mcid.
${default_mcid}= Get DCMI Management Controller Identifier String
Set Test Variable ${default_mcid}
Set Default MCID
[Documentation] Set default mcid.
@{ipmi_cmd_rsp_list}= Split String ${default_mcid}
${number_of_bytes_to_write}= Set Variable ${ipmi_cmd_rsp_list[1]}
${bytes_in_int}= Convert To Integer ${number_of_bytes_to_write} 16
${bytes_to_write}= Evaluate ${bytes_in_int} + 1
${no_of_bytes_to_write}= Get Response Length In Hex ${bytes_to_write}
@{tmp_lst}= Create List
FOR ${bytes} IN @{ipmi_cmd_rsp_list[2:]}
Append To List ${tmp_lst} 0x${bytes}
END
${default_hex}= Catenate @{tmp_lst}
${cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['SET']}
... 0x${no_of_bytes_to_write} ${default_hex}
Run External IPMI Raw Command ${cmd}
Get DCMI Management Controller Identifier String
[Documentation] Get DCMI MCID String.
${mcid_get_cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['GET']}
${resp}= Run IPMI Command ${mcid_get_cmd}
${resp}= Strip String ${resp} mode=right characters=${SPACE}00\n
RETURN ${resp}
Set DCMI Management Controller Identifier String
[Documentation] Set DCMI MCID String.
# 16 bytes maximum as per dcmi spec
${random_int}= Evaluate random.randint(1, 15) modules=random
${random_string}= Generate Random String ${random_int}
${string_hex_list}= convert_name_into_bytes_with_prefix ${random_string}
${random_hex}= Catenate @{string_hex_list}
${number_of_random_string}= Evaluate ${random_int} + 1
${number_of_bytes_to_write}= Get Response Length In Hex ${number_of_random_string}
${mcid_set_cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['SET']}
... 0x${number_of_bytes_to_write} ${random_hex} 0x00
${resp}= Run External IPMI Raw Command ${mcid_set_cmd}
Set Test Variable ${string_hex_list}
Set Test Variable ${random_int}
Set Test Variable ${number_of_bytes_to_write}
RETURN ${resp}
Get Hostname From BMC Console
[Documentation] Get hostname.
${cmd}= Catenate cat ${hostname_file_path}
${bmc_hostname}= BMC Execute Command ${cmd}
${name}= Convert To List ${bmc_hostname}
${hostname_bytes}= convert_name_into_bytes_without_prefix ${name[0]}
RETURN ${hostname_bytes}
Get Response Length In Hex
[Documentation] Get response length in hex.
[Arguments] ${resp_length}
${length}= Convert To Hex ${resp_length}
${length_1}= Get Length ${length}
${length_2}= Set Variable IF
... '${length_1}' == '1' 0${length}
... '${length_1}' != '1' ${length}
${resp_length_3}= Convert To Lower Case ${length_2}
RETURN ${resp_length_3}