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
