1*** Settings *** 2Documentation This suite tests IPMI SOL in OpenBMC. 3 4Resource ../lib/ipmi_client.robot 5Resource ../lib/openbmc_ffdc.robot 6Resource ../lib/state_manager.robot 7Resource ../lib/boot_utils.robot 8Resource ../lib/bmc_redfish_resource.robot 9Library ../lib/ipmi_utils.py 10 11Test Setup Start SOL Console Logging 12Test Teardown Test Teardown Execution 13 14Force Tags SOL_Test 15 16 17*** Variables *** 18 19*** Test Cases *** 20 21Set SOL Enabled 22 [Documentation] Verify enabling SOL via IPMI. 23 [Tags] Set_SOL_Enabled 24 25 ${msg}= Run Keyword Run IPMI Standard Command 26 ... sol set enabled true 27 28 # Verify SOL status from ipmitool sol info command. 29 ${sol_info_dict}= Get SOL Info 30 ${sol_enable_status}= Get From Dictionary 31 ... ${sol_info_dict} Enabled 32 33 Should Be Equal '${sol_enable_status}' 'true' 34 35 36Set SOL Disabled 37 [Documentation] Verify disabling SOL via IPMI. 38 [Tags] Set_SOL_Disabled 39 40 ${msg}= Run Keyword Run IPMI Standard Command 41 ... sol set enabled false 42 43 # Verify SOL status from ipmitool sol info command. 44 ${sol_info_dict}= Get SOL Info 45 ${sol_enable_status}= Get From Dictionary 46 ... ${sol_info_dict} Enabled 47 Should Be Equal '${sol_enable_status}' 'false' 48 49 # Verify error while activating SOL with SOL disabled. 50 ${msg}= Run Keyword And Expect Error * Run IPMI Standard Command 51 ... sol activate 52 Should Contain ${msg} SOL payload disabled ignore_case=True 53 54 55Set Valid SOL Privilege Level 56 [Documentation] Verify valid SOL's privilege level via IPMI. 57 [Tags] Set_Valid_SOL_Privilege_Level 58 59 ${privilege_level_list}= Create List user operator admin oem 60 : FOR ${item} IN @{privilege_level_list} 61 \ Set SOL Setting privilege-level ${item} 62 \ ${output}= Get SOL Setting Privilege Level 63 \ Should Contain ${output} ${item} ignore_case=True 64 65 66Set Invalid SOL Privilege Level 67 [Documentation] Verify invalid SOL's retry count via IPMI. 68 [Tags] Set_Invalid_SOL_Privilege_Level 69 70 ${value}= Generate Random String ${8} 71 ${msg}= Run Keyword And Expect Error * Run IPMI Standard Command 72 ... sol set privilege-level ${value} 73 Should Contain ${msg} Invalid value ignore_case=True 74 75 76Set Invalid SOL Retry Count 77 [Documentation] Verify invalid SOL's retry count via IPMI. 78 [Tags] Set_Invalid_SOL_Retry_Count 79 80 # Any integer above 7 is invalid for SOL retry count. 81 ${value}= Evaluate random.randint(8, 10000) modules=random 82 83 ${msg}= Run Keyword And Expect Error * Run IPMI Standard Command 84 ... sol set retry-count ${value} 85 Should Contain ${msg} Invalid value ignore_case=True 86 87 88Set Invalid SOL Retry Interval 89 [Documentation] Verify invalid SOL's retry interval via IPMI. 90 [Tags] Set_Invalid_SOL_Retry_Interval 91 92 # Any integer above 255 is invalid for SOL retry interval. 93 ${value}= Evaluate random.randint(256, 10000) modules=random 94 95 ${msg}= Run Keyword And Expect Error * Run IPMI Standard Command 96 ... sol set retry-interval ${value} 97 Should Contain ${msg} Invalid value ignore_case=True 98 99 100Set Invalid SOL Character Accumulate Level 101 [Documentation] Verify invalid SOL's character accumulate level via IPMI. 102 [Tags] Set_Invalid_SOL_Character_Accumulate_Level 103 104 # Any integer above 255 is invalid for SOL character accumulate level. 105 ${value}= Evaluate random.randint(256, 10000) modules=random 106 107 ${msg}= Run Keyword And Expect Error * Run IPMI Standard Command 108 ... sol set character-accumulate-level ${value} 109 Should Contain ${msg} Invalid value ignore_case=True 110 111 112Set Invalid SOL Character Send Threshold 113 [Documentation] Verify invalid SOL's character send threshold via IPMI. 114 [Tags] Set_Invalid_SOL_Character_Send_Threshold 115 116 # Any integer above 255 is invalid for SOL character send threshold. 117 ${value}= Evaluate random.randint(256, 10000) modules=random 118 119 ${msg}= Run Keyword And Expect Error * Run IPMI Standard Command 120 ... sol set character-send-threshold ${value} 121 Should Contain ${msg} Invalid value ignore_case=True 122 123 124Verify SOL During Boot 125 [Documentation] Verify SOL during boot. 126 [Tags] Verify_SOL_During_Boot 127 128 Redfish Power Off 129 Activate SOL Via IPMI 130 Redfish Power On 131 132 Check IPMI SOL Output Content Welcome to Hostboot 133 Check IPMI SOL Output Content ISTEP 134 135 136Verify Deactivate Non Existing SOL 137 [Documentation] Verify deactivate non existing SOL session. 138 [Tags] Verify_Deactivate_Non_Existing_SOL 139 140 ${resp}= Deactivate SOL Via IPMI 141 Should Contain ${resp} SOL payload already de-activated 142 ... case_insensitive=True 143 144 145Set Valid SOL Retry Count 146 [Documentation] Verify valid SOL's retry count via IPMI. 147 [Tags] Set_Valid_SOL_Retry_Count 148 [Template] Verify SOL Setting 149 150 # Setting name Min valid value Max valid value 151 retry-count 0 7 152 153 154Set Valid SOL Retry Interval 155 [Documentation] Verify valid SOL's retry interval via IPMI. 156 [Tags] Set_Valid_SOL_Retry_Interval 157 [Template] Verify SOL Setting 158 159 # Setting name Min valid value Max valid value 160 retry-interval 0 255 161 162 163Set Valid SOL Character Accumulate Level 164 [Documentation] Verify valid SOL's character accumulate level via IPMI. 165 [Tags] Set_Valid_SOL_Character_Accumulate_Level 166 [Template] Verify SOL Setting 167 168 # Setting name Min valid value Max valid value 169 character-accumulate-level 1 255 170 171 172Set Valid SOL Character Send Threshold 173 [Documentation] Verify valid SOL's character send threshold via IPMI. 174 [Tags] Set_Valid_SOL_Character_Send_Threshold 175 [Template] Verify SOL Setting 176 177 # Setting name Min valid value Max valid value 178 character-send-threshold 0 255 179 180*** Keywords *** 181 182Check IPMI SOL Output Content 183 [Documentation] Check if SOL has given content. 184 [Arguments] ${data} ${file_path}=/tmp/sol_${OPENBMC_HOST} 185 # Description of argument(s): 186 # data Content which need to be checked(e.g. Petitboot, ISTEP). 187 # file_path The file path on the local machine to check SOL content. 188 # By default it check SOL content from /tmp/sol_<BMC_IP>. 189 190 ${output}= OperatingSystem.Get File ${file_path} encoding_errors=ignore 191 Should Contain ${output} ${data} case_insensitive=True 192 193 194Verify SOL Setting 195 [Documentation] Verify SOL Setting via IPMI. 196 [Arguments] ${setting_name} ${min_value} ${max_value} 197 # Description of Arguments: 198 # setting_name Setting to verify (e.g. "retry-count"). 199 # min_value min valid value for given setting. 200 # max_value max valid value for given setting. 201 202 ${value}= 203 ... Evaluate random.randint(${min_value}, ${max_value}) modules=random 204 205 # Character accumulate level setting is set in multiples of 5. 206 # Retry interval setting is set in multiples of 10. 207 # Reference IPMI specification v2.0 208 209 ${expected_value}= Run Keyword If 210 ... '${setting_name}' == 'character-accumulate-level' Evaluate ${value}*5 211 ... ELSE IF '${setting_name}' == 'retry-interval' Evaluate ${value}*10 212 ... ELSE Set Variable ${value} 213 214 Set SOL Setting ${setting_name} '${value}' 215 216 # Replace "-" with space " " in setting name. 217 # E.g. "retry-count" to "retry count" 218 ${setting_name}= Evaluate $setting_name.replace('-',' ') 219 220 ${sol_info_dict}= Get SOL Info 221 222 # Get exact SOL setting name from sol info output. 223 ${list}= Get Matches ${sol_info_dict} ${setting_name}* 224 ... case_insensitive=${True} 225 ${setting_name_from_dict}= Get From List ${list} 0 226 227 # Get SOL setting value from above setting name. 228 ${setting_value}= Get From Dictionary 229 ... ${sol_info_dict} ${setting_name_from_dict} 230 231 Should Be Equal '${setting_value}' '${expected_value}' 232 233 # Power on host to check if SOL is working fine with new setting. 234 ${current_state}= Get Host State Via External IPMI 235 Run Keyword If '${current_state}' == 'on' 236 ... Initiate Host PowerOff Via External IPMI 237 Initiate Host Boot Via External IPMI wait=${0} 238 239 Activate SOL Via IPMI 240 Wait Until Keyword Succeeds 10 mins 30 secs 241 ... Check IPMI SOL Output Content Welcome to Hostboot 242 243 Wait Until Keyword Succeeds 3 mins 30 secs 244 ... Check IPMI SOL Output Content ISTEP 245 246Get SOL Setting 247 [Documentation] Returns status for given SOL setting. 248 [Arguments] ${setting} 249 # Description of argument(s): 250 # setting SOL setting which needs to be read(e.g. "Retry Count"). 251 252 ${sol_info_dict}= Get SOL Info 253 ${setting_status}= Get From Dictionary ${sol_info_dict} ${setting} 254 255 [Return] ${setting_status} 256 257 258Restore Default SOL Configuration 259 [Documentation] Restore default SOL configuration. 260 261 Set SOL Setting enabled true 262 Set SOL Setting retry-count 7 263 Set SOL Setting retry-interval 10 264 Set SOL Setting character-accumulate-level 20 265 Set SOL Setting character-send-threshold 1 266 Set SOL Setting privilege-level user 267 268 269Test Teardown Execution 270 [Documentation] Do the post test teardown. 271 272 Deactivate SOL Via IPMI 273 ${sol_log}= Stop SOL Console Logging 274 Log ${sol_log} 275 FFDC On Test Case Fail 276 Wait Until Keyword Succeeds 15 sec 5 sec Restore Default SOL Configuration 277