| *** Settings *** |
| Documentation Test BMC manager protocol enable/disable functionality. |
| |
| Resource ../../lib/resource.robot |
| Resource ../../lib/bmc_redfish_resource.robot |
| Resource ../../lib/openbmc_ffdc.robot |
| |
| Suite Setup Redfish.Login |
| Suite Teardown Redfish.Logout |
| Test Teardown FFDC On Test Case Fail |
| |
| |
| *** Variables *** |
| |
| ${cmd_prefix} ipmitool -I lanplus -C 17 -p 623 -U ${OPENBMC_USERNAME} -P ${OPENBMC_PASSWORD} |
| |
| |
| *** Test Cases *** |
| |
| Verify SSH Is Enabled By Default |
| [Documentation] Verify SSH is enabled by default. |
| [Tags] Verify_SSH_Is_Enabled_By_Default |
| |
| # Check if SSH is enabled by default. |
| Verify SSH Protocol State ${True} |
| |
| |
| Enable SSH Protocol And Verify |
| [Documentation] Enable SSH protocol and verify. |
| [Tags] Enable_SSH_Protocol_And_Verify |
| |
| Enable SSH Protocol ${True} |
| |
| # Check if SSH is really enabled via Redfish. |
| Verify SSH Protocol State ${True} |
| |
| # Check if SSH login and commands on SSH session work. |
| Verify SSH Login And Commands Work |
| |
| |
| Disable SSH Protocol And Verify |
| [Documentation] Disable SSH protocol and verify. |
| [Teardown] Enable SSH Protocol ${True} |
| |
| # Disable SSH interface. |
| Enable SSH Protocol ${False} |
| |
| # Check if SSH is really disabled via Redfish. |
| Verify SSH Protocol State ${False} |
| |
| # Check if SSH login and commands fail. |
| ${status}= Run Keyword And Return Status |
| ... Verify SSH Login And Commands Work |
| |
| Should Be Equal As Strings ${status} False |
| ... msg=SSH Login and commands are working after disabling SSH. |
| |
| |
| Enable SSH Protocol And Check Persistency On BMC Reboot |
| [Documentation] Enable SSH protocol and verify persistency. |
| |
| Enable SSH Protocol ${True} |
| |
| # Reboot BMC and verify persistency. |
| OBMC Reboot (off) |
| |
| # Check if SSH is really enabled via Redfish. |
| Verify SSH Protocol State ${True} |
| |
| # Check if SSH login and commands on SSH session work. |
| Verify SSH Login And Commands Work |
| |
| |
| Disable SSH Protocol And Check Persistency On BMC Reboot |
| [Documentation] Disable SSH protocol and verify persistency. |
| [Teardown] Enable SSH Protocol ${True} |
| |
| # Disable SSH interface. |
| Enable SSH Protocol ${False} |
| |
| # Reboot BMC and verify persistency. |
| OBMC Reboot (off) |
| |
| # Check if SSH is really disabled via Redfish. |
| Verify SSH Protocol State ${False} |
| |
| # Check if SSH login and commands fail. |
| ${status}= Run Keyword And Return Status |
| ... Verify SSH Login And Commands Work |
| |
| Should Be Equal As Strings ${status} False |
| ... msg=SSH Login and commands are working after disabling SSH. |
| |
| |
| Verify Disabling SSH Port Does Not Disable Serial Console Port |
| [Documentation] Verify disabling SSH does not disable serial console port. |
| [Tags] Verify_Disabling_SSH_Port_Does_Not_Disable_Serial_Console_Port |
| [Teardown] Enable SSH Protocol ${True} |
| |
| # Disable SSH interface. |
| Enable SSH Protocol ${False} |
| |
| # Check able to establish connection with serial port console. |
| Open Connection And Log In host=${OPENBMC_HOST} port=2200 |
| Close All Connections |
| |
| |
| Verify Existing SSH Session Gets Closed On Disabling SSH |
| [Documentation] Verify existing SSH session gets closed on disabling ssh. |
| [Tags] Verify_Existing_SSH_Session_Gets_Closed_On_Disabling_SSH |
| [Teardown] Enable SSH Protocol ${True} |
| |
| # Open SSH connection. |
| Open Connection And Login |
| |
| # Disable SSH interface. |
| Enable SSH Protocol ${False} |
| |
| # Check if SSH is really disabled via Redfish. |
| Verify SSH Protocol State ${False} |
| |
| # Try to execute CLI command on SSH connection. |
| # It should fail as disable SSH will close pre existing sessions. |
| ${status}= Run Keyword And Return Status |
| ... BMC Execute Command /sbin/ip addr |
| |
| Should Be Equal As Strings ${status} False |
| ... msg=Disabling SSH has not closed existing SSH sessions. |
| |
| |
| Enable IPMI Protocol And Verify |
| [Documentation] Enable IPMI protocol and verify. |
| [Tags] Enable_IPMI_Protocol_And_Verify |
| [Teardown] Enable IPMI Protocol ${False} |
| |
| Enable IPMI Protocol ${True} |
| |
| # Check if IPMI is really enabled via Redfish. |
| Verify IPMI Protocol State ${True} |
| |
| # Check if IPMI commands starts working. |
| Verify IPMI Works lan print |
| |
| |
| Disable IPMI Protocol And Verify |
| [Documentation] Disable IPMI protocol and verify. |
| [Tags] Disable_IPMI_Protocol_And_Verify |
| |
| # Disable IPMI interface. |
| Enable IPMI Protocol ${False} |
| |
| # Check if IPMI is really disabled via Redfish. |
| Verify IPMI Protocol State ${False} |
| |
| # Check if IPMI commands fail. |
| ${status}= Run Keyword And Return Status |
| ... Verify IPMI Works lan print |
| |
| Should Be Equal As Strings ${status} False |
| ... msg=IPMI commands are working after disabling IPMI. |
| |
| |
| *** Keywords *** |
| |
| Enable SSH Protocol |
| [Documentation] Enable or disable SSH protocol. |
| [Arguments] ${enable_value}=${True} |
| |
| # Description of argument(s}: |
| # enable_value Enable or disable SSH, e.g. (true, false). |
| |
| ${ssh_state}= Create Dictionary ProtocolEnabled=${enable_value} |
| ${data}= Create Dictionary SSH=${ssh_state} |
| |
| Redfish.Patch ${REDFISH_NW_PROTOCOL_URI} body=&{data} |
| ... valid_status_codes=[${HTTP_NO_CONTENT}] |
| |
| # Wait for timeout for new values to take effect. |
| Sleep ${NETWORK_TIMEOUT}s |
| |
| |
| Verify SSH Login And Commands Work |
| [Documentation] Verify if SSH connection works and able to run command on SSH session. |
| [Teardown] Close All Connections |
| |
| # Check if we can open SSH connection and login. |
| Open Connection And Login |
| |
| # Check if we can run command successfully on SSH session. |
| BMC Execute Command /sbin/ip addr |
| |
| |
| Verify SSH Protocol State |
| [Documentation] verify SSH protocol state. |
| [Arguments] ${state}=${True} |
| |
| # Description of argument(s}: |
| # state Enable or disable SSH, e.g. (true, false) |
| |
| # Sample output: |
| # { |
| # "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol", |
| # "@odata.type": "#ManagerNetworkProtocol.v1_5_0.ManagerNetworkProtocol", |
| # "Description": "Manager Network Service", |
| # "FQDN": "bmc", |
| # "HTTP": { |
| # "Port": 0, |
| # "ProtocolEnabled": false |
| # }, |
| # "HTTPS": { |
| # "Certificates": { |
| # "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates" |
| # }, |
| # "Port": xxx, |
| # "ProtocolEnabled": true |
| # }, |
| # "HostName": "xxxxbmc", |
| # "IPMI": { |
| # "Port": xxx, |
| # "ProtocolEnabled": true |
| # }, |
| # "Id": "NetworkProtocol", |
| # "NTP": { |
| # "NTPServers": [ |
| # "xx.xx.xx.xx", |
| # "xx.xx.xx.xx", |
| # "xx.xx.xx.xx" |
| # ], |
| # "ProtocolEnabled": true |
| # }, |
| # "Name": "Manager Network Protocol", |
| # "SSH": { |
| # "Port": xx, |
| # "ProtocolEnabled": true |
| # }, |
| # "Status": { |
| # "Health": "OK", |
| # "HealthRollup": "OK", |
| # "State": "Enabled" |
| # } |
| # } |
| |
| ${resp}= Redfish.Get ${REDFISH_NW_PROTOCOL_URI} |
| Should Be Equal As Strings ${resp.dict['SSH']['ProtocolEnabled']} ${state} |
| ... msg=Protocol states are not matching. |
| |
| |
| Enable IPMI Protocol |
| [Documentation] Enable or disable IPMI protocol. |
| [Arguments] ${enable_value}=${True} |
| |
| # Description of argument(s}: |
| # enable_value Enable or disable IPMI, e.g. (true, false). |
| |
| ${ipmi_state}= Create Dictionary ProtocolEnabled=${enable_value} |
| ${data}= Create Dictionary IPMI=${ipmi_state} |
| |
| Redfish.Patch ${REDFISH_NW_PROTOCOL_URI} body=&{data} |
| ... valid_status_codes=[${HTTP_NO_CONTENT}] |
| |
| # Wait for timeout for new values to take effect. |
| Sleep ${NETWORK_TIMEOUT}s |
| |
| |
| Verify IPMI Works |
| [Documentation] Run IPMI command and return status. |
| [Arguments] ${sub_cmd} ${host}=${OPENBMC_HOST} |
| |
| # Description of argument(s): |
| # host BMC host name or IP address. |
| # sub_cmd The IPMI command string to be executed. |
| |
| ${rc}= Run And Return Rc ${cmd_prefix} -H ${host} ${sub_cmd} |
| Should Be Equal As Strings ${rc} 0 |
| ... msg=IPMI is not enabled and commands are failing. |
| |
| |
| Verify IPMI Protocol State |
| [Documentation] Verify IPMI protocol state. |
| [Arguments] ${state}=${True} |
| |
| # Description of argument(s}: |
| # state Enable or disable IPMI, e.g. (true, false) |
| |
| ${resp}= Redfish.Get ${REDFISH_NW_PROTOCOL_URI} |
| Should Be Equal As Strings ${resp.dict['IPMI']['ProtocolEnabled']} ${state} |
| ... msg=Protocol states are not matching. |