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 Hard Power Off 129 Activate SOL Via IPMI 130 Initiate Host Boot Via External IPMI wait=${0} 131 132 Wait Until Keyword Succeeds 3 mins 15 secs 133 ... Check IPMI SOL Output Content Welcome to Hostboot 134 135 Wait Until Keyword Succeeds 3 mins 15 secs 136 ... Check IPMI SOL Output Content ISTEP 137 138 Redfish Hard Power Off 139 140 141Verify Deactivate Non Existing SOL 142 [Documentation] Verify deactivate non existing SOL session. 143 [Tags] Verify_Deactivate_Non_Existing_SOL 144 145 ${resp}= Deactivate SOL Via IPMI 146 Should Contain ${resp} SOL payload already de-activated 147 ... case_insensitive=True 148 149 150Set Valid SOL Retry Count 151 [Documentation] Verify valid SOL's retry count via IPMI. 152 [Tags] Set_Valid_SOL_Retry_Count 153 [Template] Verify SOL Setting 154 155 # Setting name Min valid value Max valid value 156 retry-count 0 7 157 158 159Set Valid SOL Retry Interval 160 [Documentation] Verify valid SOL's retry interval via IPMI. 161 [Tags] Set_Valid_SOL_Retry_Interval 162 [Template] Verify SOL Setting 163 164 # Setting name Min valid value Max valid value 165 retry-interval 0 255 166 167 168Set Valid SOL Character Accumulate Level 169 [Documentation] Verify valid SOL's character accumulate level via IPMI. 170 [Tags] Set_Valid_SOL_Character_Accumulate_Level 171 [Template] Verify SOL Setting 172 173 # Setting name Min valid value Max valid value 174 character-accumulate-level 1 255 175 176 177Set Valid SOL Character Send Threshold 178 [Documentation] Verify valid SOL's character send threshold via IPMI. 179 [Tags] Set_Valid_SOL_Character_Send_Threshold 180 [Template] Verify SOL Setting 181 182 # Setting name Min valid value Max valid value 183 character-send-threshold 0 255 184 185 186Verify Continuous Activation And Deactivation Of SOL 187 [Documentation] Continuously on and off SOL. 188 [Tags] Verify_Continuous_Activation_And_Deactivation_Of_SOL 189 190 ${iteration_count}= Evaluate random.randint(5,10) modules=random 191 FOR ${iter} IN RANGE ${iteration_count} 192 Activate SOL Via IPMI 193 Deactivate SOL Via IPMI 194 END 195 196 197*** Keywords *** 198 199Check IPMI SOL Output Content 200 [Documentation] Check if SOL has given content. 201 [Arguments] ${data} ${file_path}=/tmp/sol_${OPENBMC_HOST} 202 # Description of argument(s): 203 # data Content which need to be checked(e.g. Petitboot, ISTEP). 204 # file_path The file path on the local machine to check SOL content. 205 # By default it check SOL content from /tmp/sol_<BMC_IP>. 206 207 ${output}= OperatingSystem.Get File ${file_path} encoding_errors=ignore 208 Should Contain ${output} ${data} case_insensitive=True 209 210 211Verify SOL Setting 212 [Documentation] Verify SOL Setting via IPMI. 213 [Arguments] ${setting_name} ${min_value} ${max_value} 214 # Description of Arguments: 215 # setting_name Setting to verify (e.g. "retry-count"). 216 # min_value min valid value for given setting. 217 # max_value max valid value for given setting. 218 219 ${value}= 220 ... Evaluate random.randint(${min_value}, ${max_value}) modules=random 221 222 # Character accumulate level setting is set in multiples of 5. 223 # Retry interval setting is set in multiples of 10. 224 # Reference IPMI specification v2.0 225 226 ${expected_value}= Run Keyword If 227 ... '${setting_name}' == 'character-accumulate-level' Evaluate ${value}*5 228 ... ELSE IF '${setting_name}' == 'retry-interval' Evaluate ${value}*10 229 ... ELSE Set Variable ${value} 230 231 Set SOL Setting ${setting_name} '${value}' 232 233 # Replace "-" with space " " in setting name. 234 # E.g. "retry-count" to "retry count" 235 ${setting_name}= Evaluate $setting_name.replace('-',' ') 236 237 ${sol_info_dict}= Get SOL Info 238 239 # Get exact SOL setting name from sol info output. 240 ${list}= Get Matches ${sol_info_dict} ${setting_name}* 241 ... case_insensitive=${True} 242 ${setting_name_from_dict}= Get From List ${list} 0 243 244 # Get SOL setting value from above setting name. 245 ${setting_value}= Get From Dictionary 246 ... ${sol_info_dict} ${setting_name_from_dict} 247 248 Should Be Equal '${setting_value}' '${expected_value}' 249 250 Redfish Hard Power Off 251 252 Initiate Host Boot Via External IPMI wait=${0} 253 254 Activate SOL Via IPMI 255 Wait Until Keyword Succeeds 3 mins 15 secs 256 ... Check IPMI SOL Output Content Welcome to Hostboot 257 258 Wait Until Keyword Succeeds 3 mins 15 secs 259 ... Check IPMI SOL Output Content ISTEP 260 261 262Get SOL Setting 263 [Documentation] Returns status for given SOL setting. 264 [Arguments] ${setting} 265 # Description of argument(s): 266 # setting SOL setting which needs to be read(e.g. "Retry Count"). 267 268 ${sol_info_dict}= Get SOL Info 269 ${setting_status}= Get From Dictionary ${sol_info_dict} ${setting} 270 271 [Return] ${setting_status} 272 273 274Restore Default SOL Configuration 275 [Documentation] Restore default SOL configuration. 276 277 Set SOL Setting enabled true 278 Set SOL Setting retry-count 7 279 Set SOL Setting retry-interval 10 280 Set SOL Setting character-accumulate-level 20 281 Set SOL Setting character-send-threshold 1 282 Set SOL Setting privilege-level user 283 284 285Test Teardown Execution 286 [Documentation] Do the post test teardown. 287 288 Wait Until Keyword Succeeds 15 sec 5 sec Restore Default SOL Configuration 289 Deactivate SOL Via IPMI 290 ${sol_log}= Stop SOL Console Logging 291 Log ${sol_log} 292 FFDC On Test Case Fail 293