Test cases and keywords to enable/disable SSH

Change(s):
    - Test case to enable SSH and verify
    - Test case to disable SSH and verify
    - Test case to check persistency of settings on BMC reboot

Signed-off-by: Prashanth Katti <prkatti1@in.ibm.com>
Change-Id: I86bdd4f643ed747dacd1078e555512967e8f2f52
diff --git a/redfish/managers/test_bmc_protocol_settings.robot b/redfish/managers/test_bmc_protocol_settings.robot
new file mode 100644
index 0000000..4bcec85
--- /dev/null
+++ b/redfish/managers/test_bmc_protocol_settings.robot
@@ -0,0 +1,163 @@
+*** 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
+Test Teardown  FFDC On Test Case Fail
+
+
+*** Test Cases ***
+
+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.
+
+
+*** 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.