1*** Settings *** 2Documentation Module to test dcmi management controller functionality. 3Resource ../../lib/ipmi_client.robot 4Resource ../../lib/openbmc_ffdc.robot 5Resource ../../lib/bmc_network_utils.robot 6Resource ../../lib/boot_utils.robot 7Resource ../../lib/bmc_redfish_utils.robot 8Variables ../../data/ipmi_raw_cmd_table.py 9Variables ../../data/dcmi_raw_cmd_table.py 10Variables ../../data/ipmi_variable.py 11Library ../../lib/ipmi_utils.py 12Library ../../lib/utilities.py 13Library ../../lib/utils.py 14Library JSONLibrary 15 16Test Tags DCMI_Management_Controller 17 18*** Variables *** 19 20${hostname_file_path} /etc/hostname 21 22*** Test Cases *** 23Validate IPMI Response Length 24 [Documentation] Check ipmi response length. 25 [Tags] Validate_IPMI_Response_Length 26 27 ${rsp}= Get DCMI Management Controller Identifier String 28 @{ipmi_cmd_rsp_list}= Split String ${rsp} 29 # ipmi_cmd_rsp_list = ["00", "0a", "00", "01", "02", "03", 30 # "04", "05", "06", "07", "08", "09"] 31 # rsp_length = 10 32 # string_length = 0a 33 ${rsp_length}= Get Length ${ipmi_cmd_rsp_list[2:]} 34 ${string_length}= Get Response Length In Hex ${rsp_length} 35 36 # ipmi_cmd_rsp_list[1] = 0a 37 # string_length = 0a 38 # the above condition is equal. 39 # suppose if string_length and ipmi_cmd_rsp_list[1] not matches 40 # then it will fails. 41 Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length} 42 ... msg=Id string length in ipmi response is showing wrongly 43 44Test Hostname Is Same With Management Controller Identifier String 45 [Documentation] Check hostname was verified with get management 46 ... controller identifier string. 47 [Tags] Test_Hostname_Is_Same_With_Management_Controller_Identifier_String 48 49 ${rsp}= Get DCMI Management Controller Identifier String 50 @{ipmi_cmd_rsp_list}= Split String ${rsp} 51 ${bmc_console_hostname_bytes_list}= Get Hostname From BMC Console 52 53 Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${bmc_console_hostname_bytes_list} 54 ... msg=response get from dcmi get mcid cmd and hostname from "cat /etc/os-release" cmd is not same. 55 56Test Get Management Controller Identifier String 57 [Documentation] Validate set and get mcid string. 58 [Tags] Test_Get_Management_Controller_Identifier_String 59 [Setup] Get Default MCID 60 [Teardown] Set Default MCID 61 62 # Set Hostname via DCMI Management Controller Identifier String Command. 63 ${cmd_rsp}= Set DCMI Management Controller Identifier String 64 @{cmd_rsp_list}= Split String ${cmd_rsp} 65 Run Keyword And Continue On Failure 66 ... Valid Value cmd_rsp_list[1] valid_values=['${number_of_bytes_to_write}'] 67 68 ${rsp}= Get DCMI Management Controller Identifier String 69 @{ipmi_cmd_rsp_list}= Split String ${rsp} 70 71 # Verify number of bytes that was set and id string length are same. 72 ${string_length}= Get Response Length In Hex ${random_int} 73 Run Keyword And Continue On Failure 74 ... Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length} 75 ... msg=Number of bytes that was set and id string length are not same. 76 77 # Verify ID String Length and data. 78 # ipmi_cmd_rsp_list = ["00", "0a", "00", "01", "02", "03", "04", 79 # "05", "06", "07", "08", "09"] 80 # rsp_length = 10 81 # string_length = 0a 82 # ipmi_cmd_rsp_list[1] = 0a 83 # ipmi_cmd_rsp_list[1] is equal to string_length 84 # the above condition is equal. 85 # suppose if string_length and ipmi_cmd_rsp_list[1] not matches then 86 # it will fails. 87 ${rsp_length}= Get Length ${ipmi_cmd_rsp_list[2:]} 88 ${string_length}= Get Response Length In Hex ${rsp_length} 89 Run Keyword And Continue On Failure 90 ... Should Be Equal As Strings ${ipmi_cmd_rsp_list[1]} ${string_length} 91 ... msg=Id string length in ipmi response is showing wrongly 92 93 # Verify get dcmi management controller identifier string command response 94 # and the bytes used for Set DCMI MCID string. 95 ${set_dcmi_mcid_cmd}= 96 ... convert_prefix_hex_list_to_non_prefix_hex_list ${string_hex_list} 97 Run Keyword And Continue On Failure 98 ... Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${set_dcmi_mcid_cmd} 99 ... msg=Bytes given in dcmi set mcid command and string bytes got from dcmi get mcid command are not same 100 101 # Verify Hostname of cat /etc/hostname and get dcmi management controller identifier string command. 102 ${bytes_list}= Get Hostname From BMC Console 103 Run Keyword And Continue On Failure 104 ... Lists Should Be Equal ${ipmi_cmd_rsp_list[2:]} ${bytes_list} 105 ... msg=Bytes got from dcmi get mcid command and hostname from "cat /etc/os-release" command is not same. 106 107*** Keywords *** 108Get Default MCID 109 [Documentation] Get default mcid. 110 111 ${default_mcid}= Get DCMI Management Controller Identifier String 112 Set Test Variable ${default_mcid} 113 114Set Default MCID 115 [Documentation] Set default mcid. 116 117 @{ipmi_cmd_rsp_list}= Split String ${default_mcid} 118 ${number_of_bytes_to_write}= Set Variable ${ipmi_cmd_rsp_list[1]} 119 ${bytes_in_int}= Convert To Integer ${number_of_bytes_to_write} 16 120 ${bytes_to_write}= Evaluate ${bytes_in_int} + 1 121 ${no_of_bytes_to_write}= Get Response Length In Hex ${bytes_to_write} 122 @{tmp_lst}= Create List 123 FOR ${bytes} IN @{ipmi_cmd_rsp_list[2:]} 124 Append To List ${tmp_lst} 0x${bytes} 125 END 126 ${default_hex}= Catenate @{tmp_lst} 127 128 ${cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['SET']} 129 ... 0x${no_of_bytes_to_write} ${default_hex} 130 Run External IPMI Raw Command ${cmd} 131 132Get DCMI Management Controller Identifier String 133 [Documentation] Get DCMI MCID String. 134 135 ${mcid_get_cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['GET']} 136 ${resp}= Run IPMI Command ${mcid_get_cmd} 137 ${resp}= Strip String ${resp} mode=right characters=${SPACE}00\n 138 139 RETURN ${resp} 140 141Set DCMI Management Controller Identifier String 142 [Documentation] Set DCMI MCID String. 143 144 # 16 bytes maximum as per dcmi spec 145 ${random_int}= Evaluate random.randint(1, 15) modules=random 146 ${random_string}= Generate Random String ${random_int} 147 ${string_hex_list}= convert_name_into_bytes_with_prefix ${random_string} 148 ${random_hex}= Catenate @{string_hex_list} 149 ${number_of_random_string}= Evaluate ${random_int} + 1 150 ${number_of_bytes_to_write}= Get Response Length In Hex ${number_of_random_string} 151 152 ${mcid_set_cmd}= Catenate ${DCMI_RAW_CMD['DCMI']['MANAGEMENT_CONTROLLER_IDENTIFIER_STRING']['SET']} 153 ... 0x${number_of_bytes_to_write} ${random_hex} 0x00 154 ${resp}= Run External IPMI Raw Command ${mcid_set_cmd} 155 156 Set Test Variable ${string_hex_list} 157 Set Test Variable ${random_int} 158 Set Test Variable ${number_of_bytes_to_write} 159 160 RETURN ${resp} 161 162Get Hostname From BMC Console 163 [Documentation] Get hostname. 164 165 ${cmd}= Catenate cat ${hostname_file_path} 166 ${bmc_hostname}= BMC Execute Command ${cmd} 167 ${name}= Convert To List ${bmc_hostname} 168 ${hostname_bytes}= convert_name_into_bytes_without_prefix ${name[0]} 169 170 RETURN ${hostname_bytes} 171 172Get Response Length In Hex 173 [Documentation] Get response length in hex. 174 [Arguments] ${resp_length} 175 176 ${length}= Convert To Hex ${resp_length} 177 ${length_1}= Get Length ${length} 178 ${length_2}= Set Variable IF 179 ... '${length_1}' == '1' 0${length} 180 ... '${length_1}' != '1' ${length} 181 ${resp_length_3}= Convert To Lower Case ${length_2} 182 183 RETURN ${resp_length_3} 184