Create new script for IPMI System Info Parameters 0 to 5

Following parameters are verfied in the script,
1. Set In Progress - param 0
2. System Firmware Version - param 1
3. System Name - param 2
4. Primary Operating System Name - param 3
5. Operating System Name - param 4
6. Present OS Version Number - param 5

Testcases Created:
  - Verify System Info Set In Progress
  - Verify System Info Set In Progress After BMC Reboot
  - Verify Get System Info Set In Progress With Invalid Data Length
  - Verify Set System Info Set In Progress With Invalid Data Length
  - Verify Set System Info Set In Progress With Invalid State
  - Verify System Info System Firmware Version
  - Verify Get System Info System Firmware Version With Invalid Data Length
  - Verify Set System Info System Firmware Version With Invalid Data Length
  - Verify System Info System Name
  - Verify Get System Info System Name With Invalid Data Length
  - Verify Set System Info System Name With Invalid Data Length
  - Verify System Info Primary Operating System Name
  - Verify System Info Primary Operating System Name After BMC Reboot
  - Verify Get System Info Primary Operating System Name With Invalid Data Length
  - Verify Set System Info Primary Operating System Name With Invalid Data Length
  - Verify System Info Operating System Name
  - Verify System Info Operating System Name After BMC Reboot
  - Verify Get System Info Operating System Name With Invalid Data Length
  - Verify Set System Info Operating System Name With Invalid Data Length
  - Verify System Info Present OS Version Number
  - Verify Get System Info Present OS Version Number With Invalid Data Request
  - Verify Set System Info Present OS Version Number With Invalid Data Request

For Param 0 - Set In Progress, validation for change in set-in-progress/ set-complete are verified with valid request data bytes and invalid request data bytes. Since it is volatile, the response bytes are verified after cold reset.

For param 1 - System Firmware Version, the request data bytes are generated randomly and verified with response data byte, and verified  invalid request data byte.

For param 3 - System Name, the request data bytes are generated randomly and verified with response data byte, and verified  invalid request data byte.

For param 3 - Primary Operating System Name,  the request data bytes are identified in variables section and verified with response data byte, and verified invalid request data byte given as invalid_os_name in variable section. Since it is non-volatile,  the response bytes are verified with os_version_name after cold reset.

For param 4 -  Operating System Name,  the request data bytes are identified in variables section and verified with response data byte, and verified invalid request data byte given as invalid_os_name in variable section. Since it is volatile,  the response bytes are verified with default value after cold reset.

For param 5 -  Present OS Version Number,  the request data bytes are identified in variables section and verified with response data byte, and verified invalid request data byte given as invalid_os_name in variable section.

Request data for system info parameter present in data/ipmi_raw_cmd_table.py
Functions used like 'Prefix Bytes' are defined under lib/ipmi_utils.py and 'Split String With Index' in lib/utils.py - already committed in - https://gerrit.openbmc-project.xyz/c/openbmc/openbmc-test-automation/+/51641.

Tested: Run robot ipmi\test_ipmi_systeminfo_parameters.robot

Signed-off-by: chithrag <chithrag@ami.com>
Change-Id: Ic0016db9d3707cac496a5b9dbc15ac0f348a51a4
diff --git a/ipmi/test_ipmi_systeminfo_parameters.robot b/ipmi/test_ipmi_systeminfo_parameters.robot
new file mode 100644
index 0000000..f50ed3d
--- /dev/null
+++ b/ipmi/test_ipmi_systeminfo_parameters.robot
@@ -0,0 +1,709 @@
+*** Settings ***
+
+Documentation       Module to test IPMI System Info Parameters functionality.
+...                 Following parameters are verfied in the script,
+...                 1. Set In Progress - param 0,
+...                 2. System Firmware Version - param 1,
+...                 3. System Name - param 2,
+...                 4. Primary OS Name - param 3,
+...                 5. OS Name - param 4,
+...                 6. Present OS Version Number - param 5.
+
+Library             Collections
+Library             String
+Resource            ../lib/ipmi_client.robot
+Resource            ../lib/openbmc_ffdc.robot
+Library             ../lib/ipmi_utils.py
+Variables           ../data/ipmi_raw_cmd_table.py
+
+Suite Setup         Suite Setup Execution
+Suite Teardown      FFDC On Test Case Fail
+
+Test Teardown       Restore Default Configuration
+
+
+*** Variables ***
+
+# Converting to hexadecimal provides 14 bytes so string length is 0e for param 3, 4, 5.
+${valid_os_version_name}       Version2.12345
+${invalid_os_version}          ${valid_os_version_name}${6789}
+
+
+*** Test Cases ***
+
+Verify System Info Set In Progress
+    [Documentation]  Verify Set In Progress of System Info Parameter,
+    ...  to set the set-in-progress and set complete state via IPMI,
+    ...  and verify whether the state is updated and restored as expected.
+    [Tags]  Verify_System_Info_Set_In_Progress
+
+    # Set In Progress - set complete.
+    Set System Info Set In Progress  0x00
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    # Check if set-in-progress set to set complete.
+    ${complete}=  Get System Info Set In Progress
+    # ${complete[0]} - parameter version.
+    # ${complete[1]} - Configuration parameter data,
+    # here,  01h (set in progress).
+    Should Be Equal  ${complete[1]}  00
+
+    # Set In Progress - set in progress.
+    Set System Info Set In Progress  0x01
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    # Check if set-in-progress set to set inprogress.
+    ${inprogress}=  Get System Info Set In Progress
+    # ${inprogress[0]} - parameter version.
+    # ${inprogress[1]} - Configuration parameter data,
+    # here,  01h (set in progress).
+    Should Be Equal  ${inprogress[1]}  01
+
+
+Verify System Info Set In Progress After BMC Reboot
+    [Documentation]  Verify Set In Progress changes to default,
+    ...  after bmc reboot of System Info Parameter via IPMI,
+    ...  and verify whether the default setting is reflected.
+    [Tags]  Verify_System_Info_Set_In_Progress_After_BMC_Reboot
+
+    # Set the parameter 0 - Set_In_Progress to set in progress state.
+    Set System Info Set In Progress  0x01
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    # Check if set-in-progress set to set in progress.
+    ${inprogress}=  Get System Info Set In Progress
+    # ${inprogress[0]} - parameter version.
+    # ${inprogress[1]} - Configuration parameter data,
+    # here,  01h (set in progress).
+    Should Be Equal  ${inprogress[1]}  01
+
+    # Reboot BMC.
+    IPMI Std MC Reset Cold (off)
+
+    # Since the param 0 - Set In Progress is volatile,
+    # Default value should be updated after BMC reboot.
+    ${state}=  Get System Info Set In Progress
+    # ${state[0]} - parameter version.
+    # ${state[1]} - Configuration parameter data,
+    # here, 00h (set complete), 01h (set in progress),
+    #       10 (commit write), 11 (reserved).
+    Should Be Equal  ${state[1]}  ${set_in_progress}
+
+
+Verify Get System Info Set In Progress With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter Set In Progress via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_Set_In_Progress_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 0 - set in progress throws error for invalid data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Get'][0]} 0x00
+
+
+Verify Set System Info Set In Progress With Invalid Data Length
+    [Documentation]  Verify Set System Info Parameter Set In Progress via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_Set_In_Progress_With_Invalid_Data_Length
+
+    # Check if the Set System Info Parameter for param 0 - set in progress throws error for invalid data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][0]} 0x00 0x00
+
+
+Verify Set System Info Set In Progress With Invalid State
+    [Documentation]  Verify Set System Info Parameter Set In Progress via IPMI invalid state,
+    ...  and expect to get the error message for invalid data.
+    [Tags]  Verify_Set_System_Info_Set_In_Progress_With_Invalid_State
+
+    # Check if the Set System Info Parameter for param 0 - set in progress throws error for invalid State.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][2]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][0]} 0x04
+
+
+Verify System Info System Firmware Version
+    [Documentation]  Verify System Firmware Version of System Info Parameter via IPMI,
+    ...  and verify whether the version is updated.
+    [Tags]  Verify_System_Info_System_Firmware_Version
+
+    # Generate a random 14 byte data,
+    # i,e 16-byte block for system firmware name string data.
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes.
+    ${firmware_version}=  Generate Random String  14  [LETTERS]
+    ${firmware_version}  ${fw_hex_data}=  Identify Request Data  ${firmware_version}
+    # Consider random string generated is 'zwclMXwfczMvcY'.
+    # Set the System Firmware Version of System Info Parameter.
+    Set System Firmware Version  ${firmware_version}
+    # Get the response of System Firmware Version,
+    # and compare against randomly generated data bytes.
+    ${fw_version}=  Get System Firmware Version
+    # The response data will something be like,
+    # ${fw_version}= ["11","00","00","0e","7a","77","63","6c","4d","58","77","66","63","7a","4d","76"].
+    Should Be Equal  ${fw_version[4:]}  ${fw_hex_data}
+
+
+Verify Get System Info System Firmware Version With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter System Firmware Version via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_System_Firmware_Version_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 1 - System Firmware Version throws error for invalid data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Get'][0]} 0x00
+
+
+Verify Set System Info System Firmware Version With Invalid Data Length
+    [Documentation]  Verify Set System Info Parameter System Firmware Version via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_System_Firmware_Version_With_Invalid_Data_Length
+
+    # Generate a random 15 byte data,
+    # i,e 16-byte block for system firmware name string data,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # data 17 - extra byte.
+    ${firmware_version}=  Generate Random String  15  [LETTERS]
+    ${firmware_version}  ${fw_hex_data}=  Identify Request Data  ${firmware_version}
+    # Consider random string generated is 'zwclMXwfczMvcYz'.
+    # The request data bytes will be 15 bytes, in which 14 bytes are only expected.
+    # Check if the Set System Info Parameter for param 1 - System Firmware Version throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Set'][0]} ${firmware_version}
+
+
+Verify System Info System Name
+    [Documentation]  Verify System Name of System Info Parameter via IPMI by setting,
+    ...  a random system name and verify whether it is updated as expected.
+    [Tags]  Verify_System_Info_System_Name
+
+    # Generate a random 14 byte data,
+    # i,e 16-byte block for system firmware name string data,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes.
+    ${system_name}=  Generate Random String  14  [LETTERS]
+    ${system_name}  ${name_hex_data}=  Identify Request Data  ${system_name}
+    # Consider random string generated is 'zwclMXwfczMvcY'.
+
+    # Set System Name for System Info Parameter.
+    Set System Name  ${system_name}
+
+    # Get the response of System Name,
+    # and compare against randomly generated data bytes.
+    ${sys_name}=  Get System Name
+    # The response data will something be like,
+    # ${sys_name}= ["11","00","00","0e","7a","77","63","6c","4d","58","77","66","63","7a","4d","76"].
+    Should Be Equal  ${sys_name[4:]}  ${name_hex_data}
+
+
+Verify Get System Info System Name With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter System Name via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_System_Name_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 2 - System Name throws error for invalid request data length.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Get'][0]} 0x00
+
+
+Verify Set System Info System Name With Invalid Data Length
+    [Documentation]  Verify Set System Info Parameter System Name via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_System_Name_With_Invalid_Data_Length
+
+    # Generate a random 15 byte data,
+    # i,e 16-byte block for system firmware name string data,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # data 17 - extra byte.
+    ${system_name}=  Generate Random String  15  [LETTERS]
+    ${system_name}  ${name_hex_data}=  Identify Request Data  ${system_name}
+    # Consider random string generated is 'zwclMXwfczMvcYz'.
+    # The request data bytes will be 15 bytes, in which 14 bytes are only exepcted.
+
+    # Check if the Set System Info Parameter for param 2 - System Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Set'][0]} ${system_name}
+
+
+Verify System Info Primary OS Name
+    [Documentation]  Verify Primary OS Name of System Info Parameter via IPMI,
+    ...  by setting a valid os version and verify whether it is updated as expected.
+    [Tags]  Verify_System_Info_Primary_OS_Name
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set Primary OS Name of System Info Parameter.
+    Set Primary OS Name  ${os_name}
+
+    # Get Primary OS Name of System Info Parameter.
+    # Compare with the assigned os version name data.
+    ${pr_os}=  Get Primary OS Name
+    # The response data will something be like,
+    # ${pr_os}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${pr_os[4:]}  ${os_hex_data}
+
+
+Verify System Info Primary OS Name After BMC Reboot
+    [Documentation]  Verify setting valid os version name in Primary OS Name,
+    ...  of System Info Parameter and verify it retains after BMC Reboot via IPMI.
+    [Tags]  Verify_System_Info_Primary_OS_Name_After_BMC_Reboot
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set Primary OS Name of System Info Parameter.
+    Set Primary OS Name  ${os_name}
+
+    # Get Primary OS Name of System Info Parameter.
+    # Compare with the assigned os version name data.
+    ${pr_os}=  Get Primary OS Name
+    # The response data will something be like,
+    # ${pr_os}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${pr_os[4:]}  ${os_hex_data}
+
+    # Cold Reset Via IPMI
+    IPMI Std MC Reset Cold (off)
+
+    # Since Primary OS Name is non-volatile,
+    # compare with response data of Get Primary OS Name,
+    # with assigned OS version name.
+    ${pr_os}=  Get Primary OS Name
+    # The response data should be,
+    # ${pr_os}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${pr_os[4:]}  ${os_hex_data}
+
+
+Verify Get System Info Primary OS Name With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter Primary OS Name via IPMI with extra bytes,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_Primary_OS_Name_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 3 - Primary OS Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Get'][0]} 0x00
+
+
+Verify Set System Info Primary OS Name With Invalid Data Length
+    [Documentation]  Verify setting invalid os version name to Primary OS Name,
+    ...  of Set System Info Parameter via IPMI,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_Primary_OS_Name_With_Invalid_Data_Length
+
+    # invalid_os_version given in variable section which is a 15 byte data,
+    # The actual request byte should be 16 byte data where,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # Here 15 bytes so, data 17 - extra byte.
+    ${os_name}  ${name_hex_data}=  Identify Request Data  ${invalid_os_version}
+
+    # Check if the Set System Info Parameter for param 3 - Primary OS Name throws error for invalid data request.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Set'][0]} ${os_name}
+
+
+Verify System Info OS Name
+    [Documentation]  Verify setting valid os version to OS Name,
+    ...  of System Info Parameter via IPMI and verify whether it updates as expected.
+    [Tags]  Verify_System_Info_OS_Name
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set OS Name of System Info Parameters.
+    Set OS Name  ${os_name}
+
+    # Get the OS Name and compare against given os_version_name.
+    ${sysos}=  Get OS Name
+    # The response data will something be like,
+    # ${sysos}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${sysos[4:]}  ${os_hex_data}
+
+
+Verify System Info OS Name After BMC Reboot
+    [Documentation]  Verify setting valid os version name for OS Name,
+    ...  of System Info Parameter and verify it changes to default after BMC Reboot via IPMI.
+    [Tags]  Verify_System_Info_OS_Name_After_BMC_Reboot
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set OS Name of System Info Parameters.
+    Set OS Name  ${os_name}
+
+    # Get the OS Name and compare against given os_version_name.
+    ${sysos}=  Get OS Name
+    # The response data will something be like,
+    # ${sysos}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${sysos[4:]}  ${os_hex_data}
+
+    # Cold Reset via IPMI
+    IPMI Std MC Reset Cold (off)
+
+    # Since OS Name is volatile,
+    # compare with response data of Get OS Name,
+    # with default OS Name.
+    ${sysos}=  Get OS Name
+    # Should return default response data.
+    Should Be Equal  ${sysos[2:]}  ${default_os_name}
+
+
+Verify Get System Info OS Name With Invalid Data Length
+    [Documentation]  Verify OS Name of Get System Info Parameter via IPMI,
+    ...  with extra bytes, and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_OS_Name_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 4 - OS Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Get'][0]} 0x00
+
+
+Verify Set System Info OS Name With Invalid Data Length
+    [Documentation]  Verify setting invalid os version name to OS Name,
+    ...  of Get System Info Parameter via IPMI,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_OS_Name_With_Invalid_Data_Length
+
+    # invalid_os_version given in variable section which is a 15 byte data,
+    # The actual request byte should be 16 byte data where,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # Here 15 bytes so, data 17 - extra byte.
+    ${os_name}  ${name_hex_data}=  Identify Request Data  ${invalid_os_version}
+
+    # Check if the Set System Info Parameter for param 4 - OS Name throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Set'][0]} ${os_name}
+
+
+Verify System Info Present OS Version Number
+    [Documentation]  Verify setting valid os version for Present OS Version Number,
+    ...  of System Info Parameter via IPMI and verify whether it is updated as expected.
+    [Tags]  Verify_System_Info_Present_OS_Version_Number
+
+    # os_version_name given in variable section which is a 14 byte data.
+    ${os_name}  ${os_hex_data}=  Identify Request Data  ${valid_os_version_name}
+
+    # Set Present OS Version Number for System Info Parameters.
+    Set Present OS Version Number  ${os_name}
+
+    # Get Present OS Version Number for System Info Parameters,
+    # compare with response data of Get OS Name,
+    # with assigned os version name.
+    ${os_version}=  Get Present OS Version Number
+    # The response data will something be like,
+    # ${os_version}= ["11","00","00","0e","56","65","72","73","69","6f","6e","32","2e","31","32","33"].
+    Should Be Equal  ${os_version[4:]}  ${os_hex_data}
+
+
+Verify Get System Info Present OS Version Number With Invalid Data Length
+    [Documentation]  Verify Get System Info Parameter Present OS Version Number via IPMI,
+    ...  with extra bytes, and expect to get the error message for invalid length.
+    [Tags]  Verify_Get_System_Info_Present_OS_Version_Number_With_Invalid_Data_Length
+
+    # Check if the Get System Info Parameter for param 5 - Present OS Version Number throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Get'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Get'][0]} 0x00
+
+
+Verify Set System Info Present OS Version Number With Invalid Data Length
+    [Documentation]  Verify setting invalid os version to Present OS Version Number
+    ...  of Set System Info Parameter via IPMI,
+    ...  and expect to get the error message for invalid length.
+    [Tags]  Verify_Set_System_Info_Present_OS_Version_Number_With_Invalid_Data_Length
+
+    # invalid_os_version given in variable section which is a 15 byte data.
+    # The actual request byte should be 16 byte data where,
+    # data 1 - Encoding string type,
+    # data 2 - string length (in bytes, 1-based),
+    # data 3 to 16 - system firmware name string data - 14 bytes,
+    # Here 15 bytes so, data 17 - extra byte.
+    ${os_name}  ${name_hex_data}=  Identify Request Data  ${invalid_os_version}
+
+    # Check if the Set System Info Parameter for param 5 - Present OS Version Number throws error for invalid request data.
+    Run Keyword and Expect Error  *${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Set'][1]}*
+    ...  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Set'][0]} ${os_name}
+
+
+*** Keywords ***
+
+Identify Request Data
+    [Documentation]  Convert string to hexadecimal request data with and without prefix 0x.
+    [Arguments]  ${string}
+
+    # Given a string, convert to hexadecimal and prefix with 0x.
+    # Consider random string generated ${string} is 'zwc'.
+    ${fw_ver_hex_list}=  Create List
+    ${hex_data_list}=  Create List
+    ${resp_data_list}=  Split String With Index  ${string}  1
+    # ${resp_data_list} will be ['z', 'w', 'c'].
+    FOR  ${data}  IN  @{resp_data_list}
+        # prefixes 0x by default.
+        # Example : 0x00.
+        ${hex_value}=  Evaluate  hex(ord("${data}"))
+        # provides only hexadecimal bytes.
+        # Example : 00.
+        ${hex}=  Evaluate  hex(ord("${data}"))[2:]
+        # With prefix 0x.
+        Append To List  ${fw_ver_hex_list}  ${hex_value}
+        # Without prefix.
+        Append To List  ${hex_data_list}  ${hex}
+    END
+    ${fw_ver_hex}=  Evaluate  " ".join(${fw_ver_hex_list})
+
+    [Return]  ${fw_ver_hex}  ${hex_data_list}
+
+
+Get System Info Set In Progress
+    [Documentation]  Run Get system info parameter command for set-in-progress and return response data.
+
+    # Get System Info Parameter for param 0 - Set In Progress.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set System Info Set In Progress
+    [Documentation]  Set System Info Set In Progress with valid state via IPMI.
+    [Arguments]  ${state}
+
+    # Set System Info Parameter for param 0 - Set In Progress.
+    # ${state} can be can be any - 00 | 01 | 10 | 11.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param0_Set_In_Progress']['Set'][0]} ${state}
+
+
+Get System Firmware Version
+    [Documentation]  Run Get system info parameter command for system firmware version and return response data.
+
+    # Get System Info Parameter for param 1 - System Firmware Version.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set System Firmware Version
+    [Documentation]  Set System Firmware Version for System Info with valid version.
+    [Arguments]  ${version}
+
+    # Set System Info Parameter for param 1 - System Firmware Version.
+    # ${version} can be any 14 data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param1_System_Firmware_Version']['Set'][0]} ${version}
+
+
+Get System Name
+    [Documentation]  Run system info parameter command for system name and return response data.
+
+    # Get System Info Parameter for param 2 - System Name.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set System Name
+    [Documentation]  Set System Name for System Info with valid name.
+    [Arguments]  ${sys_name}
+
+    # Set System Info Parameter for param 2 - System Name.
+    # ${sys_name} can be any 14 byte data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param2_System_Name']['Set'][0]} ${sys_name}
+
+
+Get Primary OS Name
+    [Documentation]  Run Get System Info command for primary OS name and return response data.
+
+    # Get System Info Parameter for param 3 - Primary OS Name.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set Primary OS Name
+    [Documentation]  Set Primary OS Name for System Info with valid os name.
+    [Arguments]  ${os_name}
+
+    # Set System Info Parameter for param 3 - Primary OS Name.
+    # ${os_name} can be any 14 byte data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param3_Primary_OS_Name']['Set'][0]} ${os_name}
+
+
+Get OS Name
+    [Documentation]  Run get System Info command for OS name and return response data.
+
+    # Get System Info Parameter for param 4 - OS Name.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set OS Name
+    [Documentation]  Set OS Name for System Info with valid os name.
+    [Arguments]  ${os_name}
+
+    # Set System Info Parameter for param 4 - OS Name.
+    # ${os_name} can be any 14 byte data.
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param4_OS_Name']['Set'][0]} ${os_name}
+
+
+Get Present OS Version Number
+    [Documentation]  Run Get System Info command for present os version name and return response.
+
+    # Get System Info Parameter for param 5 - Present OS Version Number.
+    ${resp}=  Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Get'][0]}
+    ${resp}=  Split String  ${resp}
+
+    [Return]  ${resp}
+
+
+Set Present OS Version Number
+    [Documentation]  Set Present OS Version Number for System Info with valid os version.
+    [Arguments]  ${os_name}
+
+    # Set System Info Parameter for param 5 - Present OS Version Number.
+    # ${os_name} can be any 14 byte data
+    Run IPMI Standard Command
+    ...  raw ${IPMI_RAW_CMD['System_Info']['param5_Present_OS_Version_number']['Set'][0]} ${os_name}
+
+
+Add Prefix To List Objects And Join String
+    [Documentation]  Adding prefix '0x' to each list object and join the string.
+    [Arguments]  ${list}
+
+    # ${list} contains list of hexadecimal data.
+
+    # Prefix Bytes with 0x for each data bytes and makes a string of request bytes.
+    # Prefix Bytes function under lib/ipmi_utils.py.
+    # Prefixes every list item with 0x and returns list of prefixed hexadecimal data.
+    ${prefix_list}=  Prefix Bytes  ${list}
+    ${prefix_list}=  Evaluate  " ".join(${prefix_list})
+
+    [Return]  ${prefix_list}
+
+
+Suite Setup Execution
+    [Documentation]  Suite setup execution to fetch all the default response bytes,
+    ...  prefix each byte with 0x and make them a suite variable.
+
+    # Get Default Values of each parameters.
+    # Set In Progress - param 0.
+    ${resp}=  Get System Info Set In Progress
+    # Configuration parameter data - 11 xx (xx can be any - 00 | 01 | 10 | 11).
+    ${set_in_progress}=  Set Variable  ${resp[1]}
+
+    Set Suite Variable  ${set_in_progress}
+
+    # System Firmware Version - param 1.
+    ${resp}=  Get System Firmware Version
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${sys_fw_version}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${sys_fw_version_string}=  Add Prefix To List Objects And Join String  ${sys_fw_version}
+
+    Set Suite Variable  ${sys_fw_version}
+    Set Suite Variable  ${sys_fw_version_string}
+
+    # System Name - param 2.
+    ${resp}=  Get System Name
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${sys_name_default}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${sys_name_hex_default}=  Add Prefix To List Objects And Join String  ${sys_name_default}
+
+    Set Suite Variable  ${sys_name_default}
+    Set Suite Variable  ${sys_name_hex_default}
+
+    # Primary OS Name - param 3.
+    ${resp}=  Get Primary OS Name
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${primary_os_name}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${primary_os_name_hex}=  Add Prefix To List Objects And Join String  ${primary_os_name}
+
+    Set Suite Variable  ${primary_os_name}
+    Set Suite Variable  ${primary_os_name_hex}
+
+    # OS Name - param 4.
+    ${resp}=  Get OS Name
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${default_os_name}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${default_os_name_hex}=  Add Prefix To List Objects And Join String  ${default_os_name}
+
+    Set Suite Variable  ${default_os_name}
+    Set Suite Variable  ${default_os_name_hex}
+
+    # Present OS Version Number - param 5.
+    ${resp}=  Get Present OS Version Number
+    # Configuration parameter data - 11 x1 x2 xx xx xx xx .. xx (xx - 14 bytes).
+    # x1 - encoding, x2 - string length in bytes.
+    ${present_os_num}=  Set Variable  ${resp[2:]}
+    # Prefix all bytes with 0x.
+    ${present_os_num_hex}=  Add Prefix To List Objects And Join String  ${present_os_num}
+
+    Set Suite Variable  ${present_os_num}
+    Set Suite Variable  ${present_os_num_hex}
+
+
+Restore Default Configuration
+    [Documentation]  Restore all system info parameter response data to,
+    ...  default data obtained from suite setup.
+
+    # All variable to set are suite variables declared in suite setup.
+
+    # Set In Progress - param 0.
+    Set System Info Set In Progress  0x${set_in_progress}
+
+    # System Firmware Version - param 1.
+    Run IPMI Standard Command  raw 0x06 0x58 0x01 0x00 ${sys_fw_version_string}
+
+    # System Name - param 2.
+    Run IPMI Standard Command  raw 0x06 0x58 0x02 0x00 ${sys_name_hex_default}
+
+    # Primary OS Name - param 3.
+    Run IPMI Standard Command  raw 0x06 0x58 0x03 0x00 ${primary_os_name_hex}
+
+    # OS Name - param 4.
+    Run IPMI Standard Command  raw 0x06 0x58 0x04 0x00 ${default_os_name_hex}
+
+    # Present OS Version Number - param 5.
+    Run IPMI Standard Command  raw 0x06 0x58 0x05 0x00 ${present_os_num_hex}
+
+    FFDC On Test Case Fail