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*** Keywords *** 186 187Check IPMI SOL Output Content 188 [Documentation] Check if SOL has given content. 189 [Arguments] ${data} ${file_path}=/tmp/sol_${OPENBMC_HOST} 190 # Description of argument(s): 191 # data Content which need to be checked(e.g. Petitboot, ISTEP). 192 # file_path The file path on the local machine to check SOL content. 193 # By default it check SOL content from /tmp/sol_<BMC_IP>. 194 195 ${output}= OperatingSystem.Get File ${file_path} encoding_errors=ignore 196 Should Contain ${output} ${data} case_insensitive=True 197 198 199Verify SOL Setting 200 [Documentation] Verify SOL Setting via IPMI. 201 [Arguments] ${setting_name} ${min_value} ${max_value} 202 # Description of Arguments: 203 # setting_name Setting to verify (e.g. "retry-count"). 204 # min_value min valid value for given setting. 205 # max_value max valid value for given setting. 206 207 ${value}= 208 ... Evaluate random.randint(${min_value}, ${max_value}) modules=random 209 210 # Character accumulate level setting is set in multiples of 5. 211 # Retry interval setting is set in multiples of 10. 212 # Reference IPMI specification v2.0 213 214 ${expected_value}= Run Keyword If 215 ... '${setting_name}' == 'character-accumulate-level' Evaluate ${value}*5 216 ... ELSE IF '${setting_name}' == 'retry-interval' Evaluate ${value}*10 217 ... ELSE Set Variable ${value} 218 219 Set SOL Setting ${setting_name} '${value}' 220 221 # Replace "-" with space " " in setting name. 222 # E.g. "retry-count" to "retry count" 223 ${setting_name}= Evaluate $setting_name.replace('-',' ') 224 225 ${sol_info_dict}= Get SOL Info 226 227 # Get exact SOL setting name from sol info output. 228 ${list}= Get Matches ${sol_info_dict} ${setting_name}* 229 ... case_insensitive=${True} 230 ${setting_name_from_dict}= Get From List ${list} 0 231 232 # Get SOL setting value from above setting name. 233 ${setting_value}= Get From Dictionary 234 ... ${sol_info_dict} ${setting_name_from_dict} 235 236 Should Be Equal '${setting_value}' '${expected_value}' 237 238 Redfish Hard Power Off 239 240 Initiate Host Boot Via External IPMI wait=${0} 241 242 Activate SOL Via IPMI 243 Wait Until Keyword Succeeds 3 mins 15 secs 244 ... Check IPMI SOL Output Content Welcome to Hostboot 245 246 Wait Until Keyword Succeeds 3 mins 15 secs 247 ... Check IPMI SOL Output Content ISTEP 248 249 250Get SOL Setting 251 [Documentation] Returns status for given SOL setting. 252 [Arguments] ${setting} 253 # Description of argument(s): 254 # setting SOL setting which needs to be read(e.g. "Retry Count"). 255 256 ${sol_info_dict}= Get SOL Info 257 ${setting_status}= Get From Dictionary ${sol_info_dict} ${setting} 258 259 [Return] ${setting_status} 260 261 262Restore Default SOL Configuration 263 [Documentation] Restore default SOL configuration. 264 265 Set SOL Setting enabled true 266 Set SOL Setting retry-count 7 267 Set SOL Setting retry-interval 10 268 Set SOL Setting character-accumulate-level 20 269 Set SOL Setting character-send-threshold 1 270 Set SOL Setting privilege-level user 271 272 273Test Teardown Execution 274 [Documentation] Do the post test teardown. 275 276 Wait Until Keyword Succeeds 15 sec 5 sec Restore Default SOL Configuration 277 Deactivate SOL Via IPMI 278 ${sol_log}= Stop SOL Console Logging 279 Log ${sol_log} 280 FFDC On Test Case Fail 281