Moved IPMI SOL test cases in new ipmi bucket

Change-Id: Ife59c486d58870963bac596b829db04c4f5707cf
Signed-off-by: Rahul Maheshwari <rahulmaheshwari@in.ibm.com>
diff --git a/ipmi/test_sol.robot b/ipmi/test_sol.robot
new file mode 100644
index 0000000..2b72bc4
--- /dev/null
+++ b/ipmi/test_sol.robot
@@ -0,0 +1,283 @@
+*** Settings ***
+Documentation       This suite tests IPMI SOL in OpenBMC.
+
+Resource            ../lib/ipmi_client.robot
+Resource            ../lib/openbmc_ffdc.robot
+Library             ../lib/ipmi_utils.py
+
+Test Setup          Start SOL Console Logging
+Test Teardown       Test Teardown Execution
+
+Force Tags          SOL_Test
+
+
+*** Variables ***
+
+*** Test Cases ***
+
+Set SOL Enabled
+    [Documentation]  Verify enabling SOL via IPMI.
+    [Tags]  Set_SOL_Enabled
+
+    ${msg}=  Run Keyword  Run IPMI Standard Command
+    ...  sol set enabled true
+
+    # Verify SOL status from ipmitool sol info command.
+    ${sol_info_dict}=  Get SOL Info
+    ${sol_enable_status}=  Get From Dictionary
+    ...  ${sol_info_dict}  Enabled
+
+    Should Be Equal  '${sol_enable_status}'  'true'
+
+
+Set SOL Disabled
+    [Documentation]  Verify disabling SOL via IPMI.
+    [Tags]  Set_SOL_Disabled
+
+    ${msg}=  Run Keyword  Run IPMI Standard Command
+    ...  sol set enabled false
+
+    # Verify SOL status from ipmitool sol info command.
+    ${sol_info_dict}=  Get SOL Info
+    ${sol_enable_status}=  Get From Dictionary
+    ...  ${sol_info_dict}  Enabled
+    Should Be Equal  '${sol_enable_status}'  'false'
+
+    # Verify error while activating SOL with SOL disabled.
+    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
+    ...  sol activate
+    Should Contain  ${msg}  SOL payload disabled  ignore_case=True
+
+
+Set Valid SOL Privilege Level
+    [Documentation]  Verify valid SOL's privilege level via IPMI.
+    [Tags]  Set_Valid_SOL_Privilege_Level
+
+    ${privilege_level_list}=  Create List  user  operator  admin  oem
+    : FOR  ${item}  IN  @{privilege_level_list}
+    \  Set SOL Setting  privilege-level  ${item}
+    \  ${output}=  Get SOL Setting  Privilege Level
+    \  Should Contain  ${output}  ${item}  ignore_case=True
+
+
+Set Invalid SOL Privilege Level
+    [Documentation]  Verify invalid SOL's retry count via IPMI.
+    [Tags]  Set_Invalid_SOL_Privilege_Level
+
+    ${value}=  Generate Random String  ${8}
+    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
+    ...  sol set privilege-level ${value}
+    Should Contain  ${msg}  Invalid value  ignore_case=True
+
+
+Set Invalid SOL Retry Count
+    [Documentation]  Verify invalid SOL's retry count via IPMI.
+    [Tags]  Set_Invalid_SOL_Retry_Count
+
+    # Any integer above 7 is invalid for SOL retry count.
+    ${value}=  Evaluate  random.randint(8, 10000)  modules=random
+
+    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
+    ...  sol set retry-count ${value}
+    Should Contain  ${msg}  Invalid value  ignore_case=True
+
+
+Set Invalid SOL Retry Interval
+    [Documentation]  Verify invalid SOL's retry interval via IPMI.
+    [Tags]  Set_Invalid_SOL_Retry_Interval
+
+    # Any integer above 255 is invalid for SOL retry interval.
+    ${value}=  Evaluate  random.randint(256, 10000)  modules=random
+
+    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
+    ...  sol set retry-interval ${value}
+    Should Contain  ${msg}  Invalid value  ignore_case=True
+
+
+Set Invalid SOL Character Accumulate Level
+    [Documentation]  Verify invalid SOL's character accumulate level via IPMI.
+    [Tags]  Set_Invalid_SOL_Character_Accumulate_Level
+
+    # Any integer above 255 is invalid for SOL character accumulate level.
+    ${value}=  Evaluate  random.randint(256, 10000)  modules=random
+
+    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
+    ...  sol set character-accumulate-level ${value}
+    Should Contain  ${msg}  Invalid value  ignore_case=True
+
+
+Set Invalid SOL Character Send Threshold
+    [Documentation]  Verify invalid SOL's character send threshold via IPMI.
+    [Tags]  Set_Invalid_SOL_Character_Send_Threshold
+
+    # Any integer above 255 is invalid for SOL character send threshold.
+    ${value}=  Evaluate  random.randint(256, 10000)  modules=random
+
+    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
+    ...  sol set character-send-threshold ${value}
+    Should Contain  ${msg}  Invalid value  ignore_case=True
+
+
+Verify SOL During Boot
+    [Documentation]  Verify SOL during boot.
+    [Tags]  Verify_SOL_During_Boot
+
+    ${current_state}=  Get Host State Via External IPMI
+    Run Keyword If  '${current_state}' == 'on'
+    ...  Initiate Host PowerOff Via External IPMI
+    Initiate Host Boot Via External IPMI  wait=${0}
+
+    Activate SOL Via IPMI
+    Wait Until Keyword Succeeds  3 mins  30 secs
+    ...  Check IPMI SOL Output Content  Welcome to Hostboot
+
+    Wait Until Keyword Succeeds  3 mins  30 secs
+    ...  Check IPMI SOL Output Content  ISTEP
+
+    # Allow the host to boot.
+    Wait Until Keyword Succeeds  5 min  20 sec  Is Host Running
+
+
+Verify Deactivate Non Existing SOL
+    [Documentation]  Verify deactivate non existing SOL session.
+    [Tags]  Verify_Deactivate_Non_Existing_SOL
+
+    ${resp}=  Deactivate SOL Via IPMI
+    Should Contain  ${resp}  SOL payload already de-activated
+    ...  case_insensitive=True
+
+
+Set Valid SOL Retry Count
+    [Documentation]  Verify valid SOL's retry count via IPMI.
+    [Tags]  Set_Valid_SOL_Retry_Count
+    [Template]  Verify SOL Setting
+
+    # Setting name    Min valid value    Max valid value
+    retry-count       0                  7
+
+
+Set Valid SOL Retry Interval
+    [Documentation]  Verify valid SOL's retry interval via IPMI.
+    [Tags]  Set_Valid_SOL_Retry_Interval
+    [Template]  Verify SOL Setting
+
+    # Setting name    Min valid value    Max valid value
+    retry-interval    0                  255
+
+
+Set Valid SOL Character Accumulate Level
+    [Documentation]  Verify valid SOL's character accumulate level via IPMI.
+    [Tags]  Set_Valid_SOL_Character_Accumulate_Level
+    [Template]  Verify SOL Setting
+
+    # Setting name              Min valid value    Max valid value
+    character-accumulate-level  1                  255
+
+
+Set Valid SOL Character Send Threshold
+    [Documentation]  Verify valid SOL's character send threshold via IPMI.
+    [Tags]  Set_Valid_SOL_Character_Send_Threshold
+    [Template]  Verify SOL Setting
+
+    # Setting name              Min valid value    Max valid value
+    character-send-threshold    0                  255
+
+*** Keywords ***
+
+Check IPMI SOL Output Content
+    [Documentation]  Check if SOL has given content.
+    [Arguments]  ${data}  ${file_path}=/tmp/sol_${OPENBMC_HOST}
+    # Description of argument(s):
+    # data       Content which need to be checked(e.g. Petitboot, ISTEP).
+    # file_path  The file path on the local machine to check SOL content.
+    #            By default it check SOL content from /tmp/sol_<BMC_IP>.
+
+    ${rc}  ${output}=  Run and Return RC and Output  cat ${file_path}
+    Should Be Equal  ${rc}  ${0}  msg=${output}
+
+    Should Contain  ${output}  ${data}  case_insensitive=True
+
+
+Verify SOL Setting
+    [Documentation]  Verify SOL Setting via IPMI.
+    [Arguments]  ${setting_name}  ${min_value}  ${max_value}
+    # Description of Arguments:
+    # setting_name    Setting to verify (e.g. "retry-count").
+    # min_value       min valid value for given setting.
+    # max_value       max valid value for given setting.
+
+    ${value}=
+    ...  Evaluate  random.randint(${min_value}, ${max_value})  modules=random
+
+    # Character accumulate level setting is set in multiples of 5.
+    # Retry interval setting is set in multiples of 10.
+    # Reference IPMI specification v2.0
+
+    ${expected_value}=  Run Keyword If
+    ...  '${setting_name}' == 'character-accumulate-level'  Evaluate  ${value}*5
+    ...  ELSE IF  '${setting_name}' == 'retry-interval'  Evaluate  ${value}*10
+    ...  ELSE  Set Variable  ${value}
+
+    Set SOL Setting  ${setting_name}  '${value}'
+
+    # Replace "-" with space " " in setting name.
+    # E.g. "retry-count" to "retry count"
+    ${setting_name}=  Evaluate  $setting_name.replace('-',' ')
+
+    ${sol_info_dict}=  Get SOL Info
+
+    # Get exact SOL setting name from sol info output.
+    ${list}=  Get Matches  ${sol_info_dict}  ${setting_name}*
+    ...  case_insensitive=${True}
+    ${setting_name_from_dict}=  Get From List  ${list}  0
+
+    # Get SOL setting value from above setting name.
+    ${setting_value}=  Get From Dictionary
+    ...  ${sol_info_dict}  ${setting_name_from_dict}
+
+    Should Be Equal  '${setting_value}'  '${expected_value}'
+
+    # Power on host to check if SOL is working fine with new setting.
+    ${current_state}=  Get Host State Via External IPMI
+    Run Keyword If  '${current_state}' == 'on'
+    ...  Initiate Host PowerOff Via External IPMI
+    Initiate Host Boot Via External IPMI  wait=${0}
+
+    Activate SOL Via IPMI
+    Wait Until Keyword Succeeds  10 mins  30 secs
+    ...  Check IPMI SOL Output Content  Welcome to Hostboot
+
+    Wait Until Keyword Succeeds  3 mins  30 secs
+    ...  Check IPMI SOL Output Content  ISTEP
+
+Get SOL Setting
+    [Documentation]  Returns status for given SOL setting.
+    [Arguments]  ${setting}
+    # Description of argument(s):
+    # setting  SOL setting which needs to be read(e.g. "Retry Count").
+
+    ${sol_info_dict}=  Get SOL Info
+    ${setting_status}=  Get From Dictionary  ${sol_info_dict}  ${setting}
+
+    [Return]  ${setting_status}
+
+
+Restore Default SOL Configuration
+    [Documentation]  Restore default SOL configuration.
+
+    Set SOL Setting  enabled  true
+    Set SOL Setting  retry-count  7
+    Set SOL Setting  retry-interval  10
+    Set SOL Setting  character-accumulate-level  20
+    Set SOL Setting  character-send-threshold  1
+    Set SOL Setting  privilege-level  user
+
+
+Test Teardown Execution
+    [Documentation]  Do the post test teardown.
+
+    Deactivate SOL Via IPMI
+    ${sol_log}=  Stop SOL Console Logging
+    Log   ${sol_log}
+    FFDC On Test Case Fail
+    Restore Default SOL Configuration