1*** Settings *** 2Documentation Connections and authentication module stability tests. 3 4Resource ../lib/bmc_redfish_resource.robot 5Resource ../lib/bmc_network_utils.robot 6Resource ../lib/openbmc_ffdc.robot 7Resource ../lib/resource.robot 8Resource ../lib/utils.robot 9Resource ../lib/connection_client.robot 10Resource ../gui/lib/gui_resource.robot 11Library ../lib/bmc_network_utils.py 12 13Library SSHLibrary 14Library Collections 15Library XvfbRobot 16Library OperatingSystem 17Library SeleniumLibrary 120 120 18Library Telnet 30 Seconds 19Library Screenshot 20 21 22Suite Setup Redfish.Logout 23 24Variables ../gui/data/gui_variables.py 25 26*** Variables *** 27 28${iterations} 10000 29${loop_iteration} ${1000} 30${hostname} testhostname 31${MAX_UNAUTH_PER_IP} ${5} 32${bmc_url} https://${OPENBMC_HOST} 33 34 35*** Test Cases *** 36 37Test Patch Without Auth Token Fails 38 [Documentation] Send patch method without auth token and verify it throws an error. 39 [Tags] Test_Patch_Without_Auth_Token_Fails 40 41 ${active_channel_config}= Get Active Channel Config 42 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 43 44 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body={'HostName': '${hostname}'} 45 ... valid_status_codes=[${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}] 46 47 48Flood Patch Without Auth Token And Check Stability Of BMC 49 [Documentation] Flood patch method without auth token and check BMC stability. 50 [Tags] Flood_Patch_Without_Auth_Token_And_Check_Stability_Of_BMC 51 52 @{fail_list}= Create List 53 54 ${active_channel_config}= Get Active Channel Config 55 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 56 57 FOR ${iter} IN RANGE ${1} ${iterations} + 1 58 Log To Console ${iter}th iteration Patch Request without valid session token 59 # Expected valid fail status response code. 60 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body={'HostName': '${hostname}'} 61 ... valid_status_codes=[${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}] 62 63 # Every 100th iteration, check BMC allows patch with auth token. 64 ${status}= Run Keyword If ${iter} % 100 == 0 Run Keyword And Return Status 65 ... Login And Configure Hostname ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 66 Run Keyword If ${status} == False Append To List ${fail_list} ${iter} 67 END 68 ${verify_count}= Evaluate ${iterations}/100 69 ${fail_count}= Get Length ${fail_list} 70 71 Should Be Equal As Integers ${fail_count} ${0} 72 ... msg=Patch operation failed ${fail_count} times in ${verify_count} attempts; fails at iterations ${fail_list} 73 74 75Verify User Cannot Login After 5 Non-Logged In Sessions 76 [Documentation] User should not be able to login when there 77 ... are 5 non-logged in sessions. 78 [Tags] Verify_User_Cannot_Login_After_5_Non-Logged_In_Sessions 79 [Setup] Confirm Ability to Connect Then Close All Connections 80 [Teardown] Run Keywords Process.Terminate All Processes AND 81 ... SSHLibrary.Close All Connections AND FFDC On Test Case Fail 82 83 FOR ${iter} IN RANGE ${0} ${MAX_UNAUTH_PER_IP} 84 SSHLibrary.Open Connection ${OPENBMC_HOST} 85 Start Process ssh ${OPENBMC_USERNAME}@${OPENBMC_HOST} shell=True 86 END 87 88 SSHLibrary.Open Connection ${OPENBMC_HOST} 89 ${status}= Run Keyword And Return Status SSHLibrary.Login ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} 90 91 Should Be Equal ${status} ${False} 92 93 94Test Post Without Auth Token Fails 95 [Documentation] Send post method without auth token and verify it throws an error. 96 [Tags] Test_Post_Without_Auth_Token_Fails 97 98 ${user_info}= Create Dictionary 99 ... UserName=test_user Password=TestPwd123 RoleId=Operator Enabled=${True} 100 Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{user_info} 101 ... valid_status_codes=[${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}] 102 103 104Flood Post Without Auth Token And Check Stability Of BMC 105 [Documentation] Flood post method without auth token and check BMC stability. 106 [Tags] Flood_Post_Without_Auth_Token_And_Check_Stability_Of_BMC 107 108 @{fail_list}= Create List 109 110 ${user_info}= Create Dictionary 111 ... UserName=test_user Password=TestPwd123 RoleId=Operator Enabled=${True} 112 113 FOR ${iter} IN RANGE ${1} ${iterations} + 1 114 Log To Console ${iter}th iteration Post Request without valid session token 115 # Expected valid fail status response code. 116 Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{user_info} 117 ... valid_status_codes=[${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}] 118 119 # Every 100th iteration, check BMC allows post with auth token. 120 ${status}= Run Keyword If ${iter} % 100 == 0 Run Keyword And Return Status 121 ... Login And Create User 122 Run Keyword If ${status} == False Append To List ${fail_list} ${iter} 123 END 124 ${verify_count}= Evaluate ${iterations}/100 125 ${fail_count}= Get Length ${fail_list} 126 127 Should Be Equal As Integers ${fail_count} ${0} 128 ... msg=Post operation failed ${fail_count} times in ${verify_count} attempts; fails at iterations ${fail_list} 129 130 131Make Large Number Of Wrong SSH Login Attempts And Check Stability 132 [Documentation] Check BMC stability with large number of SSH wrong login requests. 133 [Tags] Make_Large_Number_Of_Wrong_SSH_Login_Attempts_And_Check_Stability 134 [Setup] Set Account Lockout Threshold 135 [Teardown] FFDC On Test Case Fail 136 137 SSHLibrary.Open Connection ${OPENBMC_HOST} 138 @{ssh_status_list}= Create List 139 FOR ${iter} IN RANGE ${1} ${loop_iteration} + 1 140 Log To Console ${iter}th iteration 141 ${invalid_password}= Catenate ${OPENBMC_PASSWORD}${iter} 142 Run Keyword and Ignore Error 143 ... Open Connection And Log In ${OPENBMC_USERNAME} ${invalid_password} 144 145 # Every 100th iteration Login with correct credentials 146 ${status}= Run keyword If ${iter} % ${100} == ${0} Run Keyword And Return Status 147 ... Open Connection And Log In ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} 148 Run Keyword If ${status} == ${False} Append To List ${ssh_status_list} ${status} 149 SSHLibrary.Close Connection 150 END 151 152 ${valid_login_count}= Evaluate ${iterations}/100 153 ${fail_count}= Get Length ${ssh_status_list} 154 Should Be Equal ${fail_count} ${0} 155 ... msg= Login Failed ${fail_count} times in ${valid_login_count} attempts. 156 157 158Test Stability On Large Number Of Wrong Login Attempts To GUI 159 [Documentation] Test stability on large number of wrong login attempts to GUI. 160 [Tags] Test_Stability_On_Large_Number_Of_Wrong_Login_Attempts_To_GUI 161 162 @{status_list}= Create List 163 164 # Open headless browser. 165 Start Virtual Display 166 ${browser_ID}= Open Browser ${bmc_url} alias=browser1 167 Set Window Size 1920 1080 168 169 Go To ${bmc_url} 170 171 FOR ${iter} IN RANGE ${1} ${iterations} + 1 172 Log To Console ${iter}th login 173 Run Keyword And Ignore Error Login to GUI With Incorrect Credentials 174 175 # Every 100th iteration, check BMC GUI is responsive. 176 ${status}= Run Keyword If ${iter} % 100 == 0 Run Keyword And Return Status 177 ... Open Browser ${bmc_url} 178 Append To List ${status_list} ${status} 179 Run Keyword If '${status}' == 'True' 180 ... Run Keywords Close Browser AND Switch Browser browser1 181 END 182 183 ${fail_count}= Count Values In List ${status_list} False 184 Run Keyword If ${fail_count} > ${0} FAIL Could not open BMC GUI ${fail_count} times 185 186 187Test BMC GUI Stability On Continuous Refresh Of GUI Home Page 188 [Documentation] Login to BMC GUI and keep refreshing home page and verify stability 189 ... by login at times in another browser. 190 [Tags] Test_BMC_GUI_Stability_On_Continuous_Refresh_Of_GUI_Home_Page 191 [Teardown] Close All Browsers 192 193 @{failed_list}= Create List 194 195 # Open headless browser. 196 Start Virtual Display 197 ${browser_ID}= Open Browser ${bmc_url} alias=browser1 198 Set Window Size 1920 1080 199 Login GUI 200 201 FOR ${iter} IN RANGE ${iterations} 202 Log To Console ${iter}th Refresh of home page 203 204 Refresh GUI 205 Continue For Loop If ${iter}%100 != 0 206 207 # Every 100th iteration, check BMC GUI is responsive. 208 ${status}= Run Keyword And Return Status 209 ... Run Keywords Launch Browser And Login GUI AND Logout GUI 210 Run Keyword If '${status}' == 'False' Append To List ${failed_list} ${iter} 211 ... ELSE IF '${status}' == 'True' 212 ... Run Keywords Close Browser AND Switch Browser browser1 213 END 214 Log ${failed_list} 215 ${fail_count}= Get Length ${failed_list} 216 Run Keyword If ${fail_count} > ${0} FAIL Could not open BMC GUI ${fail_count} times 217 218 219Test BMCweb Stability On Continuous Redfish Login Attempts With Invalid Credentials 220 [Documentation] Make invalid credentials Redfish login attempts continuously and 221 ... verify bmcweb stability by login to Redfish with valid credentials. 222 [Tags] Test_BMCweb_Stability_On_Continuous_Redfish_Login_Attempts_With_Invalid_Credentials 223 224 Invalid Credentials Redfish Login Attempts 225 226 227Test User Delete Operation Without Session Token And Expect Failure 228 [Documentation] Try to delete an object without valid session token and verifies it throws 229 ... an unauthorised error. 230 [Tags] Test_User_Delete_Operation_Without_Session_Token_And_Expect_Failure 231 [Setup] Redfish.Logout 232 233 Redfish.Delete /redfish/v1/AccountService/Accounts/test_user 234 ... valid_status_codes=[${HTTP_UNAUTHORIZED}] 235 236 237Test Bmcweb Stability On Continuous Redfish Delete Operation Request Without Session Token 238 [Documentation] Send delete object request without valid session token continuously and 239 ... verify bmcweb stability by sending delete request with valid session token. 240 [Tags] Test_Bmcweb_Stability_On_Continuous_Redfish_Delete_Operation_Request_Without_Session_Token 241 242 @{failed_iter_list}= Create List 243 244 FOR ${iter} IN RANGE ${iterations} 245 Log To Console ${iter}th Redfish Delete Object Request without valid session token 246 247 Run Keyword And Ignore Error 248 ... Redfish.Delete /redfish/v1/AccountService/Accounts/test_user 249 Continue For Loop If ${iter}%100 != 0 250 251 # Every 100th iteration, check delete operation with valid session token. 252 ${status}= Run Keyword And Return Status 253 ... Login And Delete User 254 Run Keyword If '${status}' == 'False' Append To List ${failed_iter_list} ${iter} 255 END 256 Log ${failed_iter_list} 257 ${fail_count}= Get Length ${failed_iter_list} 258 Run Keyword If ${fail_count} > ${0} FAIL Could not do Redfish delete operation ${fail_count} times 259 260 261Verify Flood Put Method Without Auth Token 262 [Documentation] Flood put method without auth token and check BMC stability. 263 [Tags] Verify_Flood_Put_Method_Without_Auth_Token 264 [Teardown] Delete All BMC Partition File 265 266 @{status_list}= Create List 267 268 FOR ${iter} IN RANGE ${1} ${iterations} 269 Log To Console ${iter}th iteration 270 Run Keyword And Ignore Error 271 ... Redfish.Put ${LED_LAMP_TEST_ASSERTED_URI}attr/Asserted body={"data":1} 272 # Every 100th iteration, check BMC allows put with auth token. 273 ${status}= Run Keyword If ${iter} % 100 == 0 274 ... Run Keyword And Return Status 275 ... Login And Upload Partition File To BMC 276 Run Keyword If ${status} == ${False} 277 ... Append To List ${status_list} ${status} 278 END 279 280 # Note the count for every 100 iterations. 281 ${verify_count}= Evaluate ${iterations}/100 282 ${fail_count}= Get Length ${status_list} 283 284 Should Be Equal ${fail_count} ${0} 285 ... msg=Put operation failed ${fail_count} times in ${verify_count} attempts. 286 287 288*** Keywords *** 289 290Login And Configure Hostname 291 [Documentation] Login and configure hostname 292 [Arguments] ${ethernet_interface_uri} 293 [Teardown] Redfish.Logout 294 295 # Description of argument(s): 296 # ethernet_interface_uri Network interface URI path. 297 298 Redfish.Login 299 300 Redfish.Patch ${ethernet_interface_uri} body={'HostName': '${hostname}'} 301 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] 302 303 304Login And Create User 305 [Documentation] Login and create user 306 [Teardown] Run Keywords Redfish.Delete /redfish/v1/AccountService/Accounts/test_user 307 ... AND Redfish.Logout 308 309 Redfish.Login 310 311 ${user_info}= Create Dictionary 312 ... UserName=test_user Password=TestPwd123 RoleId=ReadOnly Enabled=${True} 313 Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{user_info} 314 ... valid_status_codes=[${HTTP_OK}, ${HTTP_CREATED}] 315 316 317Login And Delete User 318 [Documentation] Login create and delete user 319 [Teardown] Redfish.Logout 320 321 Redfish.Login 322 323 ${user_info}= Create Dictionary 324 ... UserName=test_user Password=TestPwd123 RoleId=ReadOnly Enabled=${True} 325 Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{user_info} 326 ... valid_status_codes=[${HTTP_OK}, ${HTTP_CREATED}] 327 Redfish.Delete /redfish/v1/AccountService/Accounts/test_user 328 329 330Set Account Lockout Threshold 331 [Documentation] Set user account lockout threshold. 332 [Teardown] Redfish.Logout 333 334 Redfish.Login 335 Redfish.Patch /redfish/v1/AccountService body=[('AccountLockoutThreshold', 0)] 336 337 338Login to GUI With Incorrect Credentials 339 [Documentation] Attempt to login to GUI as root, providing incorrect password argument. 340 341 Input Text ${xpath_login_username_input} root 342 Input Password ${xpath_login_password_input} incorrect_password 343 Click Button ${xpath_login_button} 344 345 346Invalid Credentials Redfish Login Attempts 347 [Documentation] Continuous invalid credentials login attempts to Redfish and 348 ... login to Redfish with valid credentials at times and get failed login attempts. 349 [Arguments] ${login_username}=${OPENBMC_USERNAME} ${login_password}=${OPENBMC_PASSWORD} 350 351 # Description of argument(s): 352 # login_username username for login user. 353 # login_password password for login user. 354 355 @{failed_iter_list}= Create List 356 357 FOR ${iter} IN RANGE ${iterations} 358 Log To Console ${iter}th Redfish login with invalid credentials 359 Run Keyword And Ignore Error Redfish.Login ${login_username} incorrect_password 360 Continue For Loop If ${iter}%100 != 0 361 362 # Every 100th iteration, check Redfish is responsive. 363 ${status}= Run Keyword And Return Status 364 ... Redfish.Login ${login_username} ${login_password} 365 Run Keyword If '${status}' == 'False' Append To List ${failed_iter_list} ${iter} 366 Redfish.Logout 367 END 368 Log ${failed_iter_list} 369 ${fail_count}= Get Length ${failed_iter_list} 370 Run Keyword If ${fail_count} > ${0} FAIL Could not Login to Redfish ${fail_count} times 371 372 373Confirm Ability to Connect Then Close All Connections 374 [Documentation] Confirm that SSH login works, otherwise, skip this test. 375 ... If login succeeds, close all SSH connections to BMC to prepare for test. 376 377 SSHLibrary.Close All Connections 378 SSHLibrary.Open Connection ${OPENBMC_HOST} 379 ${status}= Run Keyword And Return Status 380 ... SSHLibrary.Login ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} 381 Skip If ${status} == ${False} msg= SSH Login failed: test will be skipped 382 SSHLibrary.Close All Connections 383 384 385Login And Upload Partition File To BMC 386 [Documentation] Upload partition file to BMC. 387 388 Create Partition File 389 Initialize OpenBMC 390 391 # Get the content of the file and upload to BMC. 392 ${image_data}= OperatingSystem.Get Binary File 100-file 393 ${headers}= Create Dictionary X-Auth-Token=${XAUTH_TOKEN} Content-Type=application/octet-stream 394 395 ${kwargs}= Create Dictionary data=${image_data} 396 Set To Dictionary ${kwargs} headers ${headers} 397 ${resp}= PUT On Session openbmc ${OEM_HOST_CONFIG_URI}/100-file &{kwargs} timeout=10 398 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} 399 Delete Local Partition File 400 401 402Delete Local Partition File 403 [Documentation] Delete local partition file. 404 405 ${file_exist}= Run Keyword And Return Status OperatingSystem.File Should Exist 100-file 406 Run Keyword If 'True' == '${file_exist}' Remove File 100-file 407 408 409Create Partition File 410 [Documentation] Create Partition file. 411 412 Delete Local Partition File 413 414 @{words}= Split String 100-file - 415 Run dd if=/dev/zero of=100-file bs=${words}[-0] count=1 416 OperatingSystem.File Should Exist 100-file 417 418 419Delete All BMC Partition File 420 [Documentation] Delete multiple partition file on BMC via Redfish. 421 422 Initialize OpenBMC 423 ${data}= Create Dictionary 424 ${headers}= Create Dictionary X-Auth-Token=${XAUTH_TOKEN} 425 Set To Dictionary ${data} headers ${headers} 426 427 ${resp}= POST On Session openbmc ${OEM_HOST_CONFIG_ACTIONS_URI}.DeleteAll &{data} 428 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} 429 430 Delete All Sessions 431