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