***Settings***
Documentation   Generic REST/SSH/IPMI stress buster program.

Library        ../lib/jobs_processing.py
Resource       ../lib/rest_client.robot
Resource       ../lib/connection_client.robot
Resource       ../lib/ipmi_client.robot
Resource       ../lib/utils.robot
Resource       ../lib/openbmc_ffdc.robot

Test Teardown  FFDC On Test Case Fail

***Variables***

# Caller can specify a value for the following using -v parms
# Currently REST/SSH/IPMI session allowed.
${REST_BUSTER_MAX}    ${16}
${SSH_BUSTER_MAX}     ${16}
${IPMI_BUSTER_MAX}    ${5}

***Test Cases***

Stress BMC REST Server
    [Documentation]  Execute maximum allowed REST operation.
    [Tags]  Stress_BMC_REST_Server

    Log To Console  REST call request burst ${REST_BUSTER_MAX}
    ${dict}=  Execute Process
    ...  ${REST_BUSTER_MAX}  REST Enumerate Request On BMC
    Dictionary Should Not Contain Value  ${dict}  False
    ...  msg=One or more REST operations has failed.


Stress BMC SSH Server
    [Documentation]  Execute maximum allowed SSH operation.
    [Tags]  Stress_BMC_SSH_Server
    Log To Console  SSH call request burst ${SSH_BUSTER_MAX}
    ${dict}=  Execute Process
    ...  ${SSH_BUSTER_MAX}  SSH Connect And Execute Command
    Dictionary Should Not Contain Value  ${dict}  False
    ...  msg=One or more SSH operations has failed.


Stress BMC IPMI Server
    [Documentation]  Execute maximum allowed IPMI operation.
    [Tags]  Stress_BMC_IPMI_Server
    Log To Console  IPMI call request burst ${IPMI_BUSTER_MAX}
    ${dict}=  Execute Process  ${IPMI_BUSTER_MAX}  IPMI Check Status
    Dictionary Should Not Contain Value  ${dict}  False
    ...  msg=One or more IPMI operations has failed.

***Keywords***

REST Enumerate Request On BMC
    [Documentation]  Execute REST GET operation.

    # Create REST session.
    Create Session  openbmc  ${AUTH_URI}
    ${headers}=  Create Dictionary  Content-Type=application/json
    @{credentials}=  Create List  ${rest_username}  ${rest_password}
    ${data}=  Create Dictionary  data=@{credentials}
    ${resp}=  POST On Session  openbmc  /login  json=${data}  headers=${headers}
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}

    # Trigger GET REST enumeration.
    ${resp}=  GET On Session  openbmc  /redfish/v1/Managers/bmc  expected_status=any
    Log To Console  GET Request /redfish/v1/Managers/bmc
    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
    Delete All Sessions


SSH Connect And Execute Command
    [Documentation]  Execute SSH command execution operation.
    BMC Execute Command  df -h


IPMI Check Status
    [Documentation]  Execute IPMI command execution operation.
    Run IPMI Standard Command  chassis status
