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