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 10Variables ../data/ipmi_raw_cmd_table.py 11 12Test Setup Start SOL Console Logging 13Test Teardown Test Teardown Execution 14 15Test Tags IPMI_SOL 16 17*** Variables *** 18 19@{valid_bit_rates} ${9.6} ${19.2} ${38.4} ${57.6} ${115.2} 20@{setinprogress} set-complete set-in-progress commit-write 21${invalid_bit_rate} 7.5 22 23 24*** Test Cases *** 25 26Set SOL Enabled 27 [Documentation] Verify enabling SOL via IPMI. 28 [Tags] Set_SOL_Enabled 29 30 ${msg}= Run Keyword Run External IPMI Standard Command 31 ... sol set enabled true 32 33 # Verify SOL status from ipmitool sol info command. 34 ${sol_info_dict}= Get SOL Info 35 ${sol_enable_status}= Get From Dictionary 36 ... ${sol_info_dict} Enabled 37 38 Should Be Equal '${sol_enable_status}' 'true' 39 40 41Set SOL Disabled 42 [Documentation] Verify disabling SOL via IPMI. 43 [Tags] Set_SOL_Disabled 44 45 ${msg}= Run Keyword Run External IPMI Standard Command 46 ... sol set enabled false 47 48 # Verify SOL status from ipmitool sol info command. 49 ${sol_info_dict}= Get SOL Info 50 ${sol_enable_status}= Get From Dictionary 51 ... ${sol_info_dict} Enabled 52 Should Be Equal '${sol_enable_status}' 'false' 53 54 # Verify error while activating SOL with SOL disabled. 55 ${msg}= Run Keyword And Expect Error * Run External IPMI Standard Command 56 ... sol activate 57 Should Contain ${msg} SOL payload disabled ignore_case=True 58 59 60Set Valid SOL Privilege Level 61 [Documentation] Verify valid SOL's privilege level via IPMI. 62 [Tags] Set_Valid_SOL_Privilege_Level 63 64 ${privilege_level_list}= Create List user operator admin oem 65 66 FOR ${item} IN @{privilege_level_list} 67 Set SOL Setting privilege-level ${item} 68 ${output}= Get SOL Setting Privilege Level 69 Should Contain ${output} ${item} ignore_case=True 70 END 71 72 73Set Invalid SOL Privilege Level 74 [Documentation] Verify invalid SOL's retry count via IPMI. 75 [Tags] Set_Invalid_SOL_Privilege_Level 76 77 ${value}= Generate Random String ${8} 78 ${msg}= Run Keyword And Expect Error * Run External IPMI Standard Command 79 ... sol set privilege-level ${value} 80 Should Contain ${msg} Invalid value ignore_case=True 81 82 83Set Invalid SOL Retry Count 84 [Documentation] Verify invalid SOL's retry count via IPMI. 85 [Tags] Set_Invalid_SOL_Retry_Count 86 87 # Any integer above 7 is invalid for SOL retry count. 88 ${value}= Evaluate random.randint(8, 10000) modules=random 89 90 ${msg}= Run Keyword And Expect Error * Run External IPMI Standard Command 91 ... sol set retry-count ${value} 92 Should Contain ${msg} Invalid value ignore_case=True 93 94 95Set Invalid SOL Retry Interval 96 [Documentation] Verify invalid SOL's retry interval via IPMI. 97 [Tags] Set_Invalid_SOL_Retry_Interval 98 99 # Any integer above 255 is invalid for SOL retry interval. 100 ${value}= Evaluate random.randint(256, 10000) modules=random 101 102 ${msg}= Run Keyword And Expect Error * Run External IPMI Standard Command 103 ... sol set retry-interval ${value} 104 Should Contain ${msg} Invalid value ignore_case=True 105 106 107Set Invalid SOL Character Accumulate Level 108 [Documentation] Verify invalid SOL's character accumulate level via IPMI. 109 [Tags] Set_Invalid_SOL_Character_Accumulate_Level 110 111 # Any integer above 255 is invalid for SOL character accumulate level. 112 ${value}= Evaluate random.randint(256, 10000) modules=random 113 114 ${msg}= Run Keyword And Expect Error * Run External IPMI Standard Command 115 ... sol set character-accumulate-level ${value} 116 Should Contain ${msg} Invalid value ignore_case=True 117 118 119Set Invalid SOL Character Send Threshold 120 [Documentation] Verify invalid SOL's character send threshold via IPMI. 121 [Tags] Set_Invalid_SOL_Character_Send_Threshold 122 123 # Any integer above 255 is invalid for SOL character send threshold. 124 ${value}= Evaluate random.randint(256, 10000) modules=random 125 126 ${msg}= Run Keyword And Expect Error * Run External IPMI Standard Command 127 ... sol set character-send-threshold ${value} 128 Should Contain ${msg} Invalid value ignore_case=True 129 130 131Verify SOL During Boot 132 [Documentation] Verify SOL activate console output during boot. 133 [Tags] Verify_SOL_During_Boot 134 135 IPMI Power Off stack_mode=skip 136 Activate SOL Via IPMI 137 Initiate Host Boot Via External IPMI wait=${0} 138 139 Should Not Be Empty ${SOL_BIOS_OUTPUT} 140 Should Not Be Empty ${SOL_LOGIN_OUTPUT} 141 142 # Content takes maximum of 10 minutes to display in SOL console 143 # SOL_BIOS_OUTPUT - BIOS SOL console output 144 ${status}= Run Keyword And Return Status Wait Until Keyword Succeeds 10 mins 15 secs 145 ... Check IPMI SOL Output Content ${SOL_BIOS_OUTPUT} 146 147 Run Keyword If '${status}' == 'False' 148 ... Run Keywords IPMI Power Off AND FAIL msg=BIOS not loaded. 149 150 # SOL_LOGIN_OUTPUT - SOL output login prompt 151 # Once host reboot completes, SOL console may take maximum of 15 minutes to get the login prompt. 152 ${status}= Run Keyword And Return Status Wait Until Keyword Succeeds 15 mins 15 secs 153 ... Check IPMI SOL Output Content ${SOL_LOGIN_OUTPUT} 154 155 Run Keyword If '${status}' == 'False' 156 ... IPMI Power Off 157 158 159Verify Deactivate Non Existing SOL 160 [Documentation] Verify deactivate non existing SOL session. 161 [Tags] Verify_Deactivate_Non_Existing_SOL 162 163 ${resp}= Deactivate SOL Via IPMI 164 Should Contain ${resp} SOL payload already de-activated 165 ... case_insensitive=True 166 167 168Set Valid SOL Retry Count 169 [Documentation] Verify valid SOL's retry count via IPMI. 170 [Tags] Set_Valid_SOL_Retry_Count 171 [Template] Verify SOL Setting 172 173 # Setting name Min valid value Max valid value 174 retry-count 0 7 175 176 177Set Valid SOL Retry Interval 178 [Documentation] Verify valid SOL's retry interval via IPMI. 179 [Tags] Set_Valid_SOL_Retry_Interval 180 [Template] Verify SOL Setting 181 182 # Setting name Min valid value Max valid value 183 retry-interval 0 255 184 185 186Set Valid SOL Character Accumulate Level 187 [Documentation] Verify valid SOL's character accumulate level via IPMI. 188 [Tags] Set_Valid_SOL_Character_Accumulate_Level 189 [Template] Verify SOL Setting 190 191 # Setting name Min valid value Max valid value 192 character-accumulate-level 1 255 193 194 195Set Valid SOL Character Send Threshold 196 [Documentation] Verify valid SOL's character send threshold via IPMI. 197 [Tags] Set_Valid_SOL_Character_Send_Threshold 198 [Template] Verify SOL Setting 199 200 # Setting name Min valid value Max valid value 201 character-send-threshold 0 255 202 203 204Verify Continuous Activation And Deactivation Of SOL 205 [Documentation] Continuously on and off SOL. 206 [Tags] Verify_Continuous_Activation_And_Deactivation_Of_SOL 207 208 ${iteration_count}= Evaluate random.randint(5,10) modules=random 209 FOR ${iter} IN RANGE ${iteration_count} 210 Activate SOL Via IPMI 211 Deactivate SOL Via IPMI 212 END 213 214 215Verify SOL Payload Channel 216 [Documentation] Verify SOL payload channel from SOL info. 217 [Tags] Verify_SOL_Payload_Channel 218 219 # Get channel number from SOL Info and verify it is not empty. 220 ${payload_channel}= Get SOL Setting Payload Channel 221 Should Not Be Empty ${payload_channel} 222 223 224Verify SOL Payload Port 225 [Documentation] Verify SOL payload port from SOL info. 226 [Tags] Verify_SOL_Payload_Port 227 228 # Get Payload Port from SOL Info and verify it equal with ipmi port. 229 ${payload_port}= Get SOL Setting Payload Port 230 Should Be Equal ${IPMI_PORT} ${payload_port} 231 232 233Set Valid SOL Non Volatile Bit Rate 234 [Documentation] Verify ability to set valid SOL non-volatile bit rate. 235 [Tags] Set_Valid_SOL_Non_Volatile_Bit_Rate 236 237 FOR ${bit_rate} IN @{valid_bit_rates} 238 239 # Set valid non-volatile-bit-rate from SOL Info. 240 Run Keyword And Expect Error *Parameter not supported* 241 ... Run External IPMI Standard Command 242 ... sol set non-volatile-bit-rate ${bit_rate} 243 244 END 245 246 247Set Invalid SOL Non Volatile Bit Rate 248 [Documentation] Verify ability to set invalid SOL non-volatile bit rate. 249 [Tags] Set_Invalid_SOL_Non_Volatile_Bit_Rate 250 251 # Set Invalid non-volatile-bit-rate from SOL Info. 252 ${resp} = Run Keyword and Expect Error *${IPMI_RAW_CMD['SOL']['Set_SOL'][0]}* 253 ... Run External IPMI Standard Command sol set non-volatile-bit-rate ${invalid_bit_rate} 254 255 # Compares whether valid values are displayed. 256 Should Contain ${resp} ${IPMI_RAW_CMD['SOL']['Set_SOL'][1]} ignore_case=True 257 258 259Set Valid SOL Volatile Bit Rate 260 [Documentation] Verify ability to set valid SOL volatile bit rate. 261 [Tags] Set_Valid_SOL_Volatile_Bit_Rate 262 263 FOR ${bit_rate} IN @{valid_bit_rates} 264 265 # Set valid volatile-bit-rate from SOL Info. 266 Run Keyword and Expect Error *Parameter not supported* 267 ... Run External IPMI Standard Command 268 ... sol set volatile-bit-rate ${bit_rate} 269 270 END 271 272 273Set Invalid SOL Volatile Bit Rate 274 [Documentation] Verify ability to set invalid SOL volatile bit rate. 275 [Tags] Set_Invalid_SOL_Volatile_Bit_Rate 276 277 # Set invalid volatile-bit-rate from SOL Info. 278 ${resp} = Run Keyword and Expect Error *${IPMI_RAW_CMD['SOL']['Set_SOL'][0]}* 279 ... Run External IPMI Standard Command sol set volatile-bit-rate ${invalid_bit_rate} 280 281 # Compares whether valid values are displayed. 282 Should Contain ${resp} ${IPMI_RAW_CMD['SOL']['Set_SOL'][1]} ignore_case=True 283 284 285Verify SOL Set In Progress 286 [Documentation] Verify ability to set the set in-progress data for SOL. 287 [Tags] Verify_SOL_Set_In_Progress 288 [Teardown] Run Keywords Set SOL Setting set-in-progress set-complete 289 ... AND Test Teardown Execution 290 291 # Set the param 0 - set-in-progress from SOL Info. 292 FOR ${prog} IN @{setinprogress} 293 Run Keyword Run External IPMI Standard Command sol set set-in-progress ${prog} 294 # Get the param 0 - set-in-progress from SOL Info and verify. 295 ${set_inprogress_state}= Get SOL Setting Set in progress 296 Should Be Equal ${prog} ${set_inprogress_state} 297 END 298 299 300*** Keywords *** 301 302Check IPMI SOL Output Content 303 [Documentation] Check if SOL has given content. 304 [Arguments] ${data} ${file_path}=${IPMI_SOL_LOG_FILE} 305 306 # Description of argument(s): 307 # data Content which need to be checked(e.g. Petitboot, ISTEP). 308 # file_path The file path on the local machine to check SOL content. 309 # By default it check SOL content from log/sol_<BMC_IP>. 310 311 ${output}= OperatingSystem.Get File ${file_path} encoding_errors=ignore 312 Should Match Regexp ${output} ${data} case_insensitive=True 313 314 315Verify SOL Setting 316 [Documentation] Verify SOL Setting via IPMI. 317 [Arguments] ${setting_name} ${min_value} ${max_value} 318 # Description of Arguments: 319 # setting_name Setting to verify (e.g. "retry-count"). 320 # min_value min valid value for given setting. 321 # max_value max valid value for given setting. 322 323 ${value}= 324 ... Evaluate random.randint(${min_value}, ${max_value}) modules=random 325 326 # Character accumulate level setting is set in multiples of 5. 327 # Retry interval setting is set in multiples of 10. 328 # Reference IPMI specification v2.0 329 330 ${expected_value}= Run Keyword If 331 ... '${setting_name}' == 'character-accumulate-level' Evaluate ${value}*5 332 ... ELSE IF '${setting_name}' == 'retry-interval' Evaluate ${value}*10 333 ... ELSE Set Variable ${value} 334 335 Set SOL Setting ${setting_name} '${value}' 336 337 # Replace "-" with space " " in setting name. 338 # E.g. "retry-count" to "retry count" 339 ${setting_name}= Evaluate $setting_name.replace('-',' ') 340 341 ${sol_info_dict}= Get SOL Info 342 343 # Get exact SOL setting name from sol info output. 344 ${list}= Get Matches ${sol_info_dict} ${setting_name}* 345 ... case_insensitive=${True} 346 ${setting_name_from_dict}= Get From List ${list} 0 347 348 # Get SOL setting value from above setting name. 349 ${setting_value}= Get From Dictionary 350 ... ${sol_info_dict} ${setting_name_from_dict} 351 352 Should Be Equal '${setting_value}' '${expected_value}' 353 354 IPMI Power Off stack_mode=skip 355 356 Initiate Host Boot Via External IPMI wait=${0} 357 358 Activate SOL Via IPMI 359 # Content takes maximum of 10 minutes to display in SOL console 360 # SOL_BIOS_OUTPUT - BIOS SOL console output 361 ${status}= Run Keyword And Return Status Wait Until Keyword Succeeds 10 mins 15 secs 362 ... Check IPMI SOL Output Content ${SOL_BIOS_OUTPUT} 363 364 Run Keyword If '${status}' == 'False' 365 ... Run Keywords IPMI Power Off AND FAIL msg=BIOS not loaded. 366 367 # SOL_LOGIN_OUTPUT - SOL output login prompt 368 # Once host reboot completes, SOL console may take maximum of 15 minutes to get the login prompt. 369 ${status}= Run Keyword And Return Status Wait Until Keyword Succeeds 15 mins 15 secs 370 ... Check IPMI SOL Output Content ${SOL_LOGIN_OUTPUT} 371 372 Run Keyword If '${status}' == 'False' 373 ... IPMI Power Off 374 375 376Get SOL Setting 377 [Documentation] Returns status for given SOL setting. 378 [Arguments] ${setting} 379 # Description of argument(s): 380 # setting SOL setting which needs to be read(e.g. "Retry Count"). 381 382 ${sol_info_dict}= Get SOL Info 383 ${setting_status}= Get From Dictionary ${sol_info_dict} ${setting} 384 385 RETURN ${setting_status} 386 387 388Restore Default SOL Configuration 389 [Documentation] Restore default SOL configuration. 390 391 Set SOL Setting enabled true 392 Set SOL Setting retry-count 7 393 Set SOL Setting retry-interval 10 394 Set SOL Setting character-accumulate-level 20 395 Set SOL Setting character-send-threshold 1 396 Set SOL Setting privilege-level user 397 398 399Test Teardown Execution 400 [Documentation] Do the post test teardown. 401 402 Wait Until Keyword Succeeds 15 sec 5 sec Restore Default SOL Configuration 403 Deactivate SOL Via IPMI 404 ${sol_log}= Stop SOL Console Logging 405 Log ${sol_log} 406 FFDC On Test Case Fail 407