1*** Settings ***
2Documentation  Test BMC manager protocol enable/disable functionality.
3
4Resource   ../../lib/resource.robot
5Resource   ../../lib/bmc_redfish_resource.robot
6Resource   ../../lib/openbmc_ffdc.robot
7
8Suite Setup    Redfish.Login
9Test Teardown  FFDC On Test Case Fail
10
11
12*** Test Cases ***
13
14Enable SSH Protocol And Verify
15    [Documentation]  Enable SSH protocol and verify.
16    [Tags]  Enable_SSH_Protocol_And_Verify
17
18    Enable SSH Protocol  ${True}
19
20    # Check if SSH is really enabled via Redfish.
21    Verify SSH Protocol State  ${True}
22
23    # Check if SSH login and commands on SSH session work.
24    Verify SSH Login And Commands Work
25
26
27Disable SSH Protocol And Verify
28    [Documentation]  Disable SSH protocol and verify.
29    [Teardown]  Enable SSH Protocol  ${True}
30
31    # Disable SSH interface.
32    Enable SSH Protocol  ${False}
33
34    # Check if SSH is really disabled via Redfish.
35    Verify SSH Protocol State  ${False}
36
37    # Check if SSH login and commands fail.
38    ${status}=  Run Keyword And Return Status
39    ...  Verify SSH Login And Commands Work
40
41    Should Be Equal As Strings  ${status}  False
42    ...  msg=SSH Login and commands are working after disabling SSH.
43
44
45Enable SSH Protocol And Check Persistency On BMC Reboot
46    [Documentation]  Enable SSH protocol and verify persistency.
47
48    Enable SSH Protocol  ${True}
49
50    # Reboot BMC and verify persistency.
51    OBMC Reboot (off)
52
53    # Check if SSH is really enabled via Redfish.
54    Verify SSH Protocol State  ${True}
55
56    # Check if SSH login and commands on SSH session work.
57    Verify SSH Login And Commands Work
58
59
60Disable SSH Protocol And Check Persistency On BMC Reboot
61    [Documentation]  Disable SSH protocol and verify persistency.
62    [Teardown]  Enable SSH Protocol  ${True}
63
64    # Disable SSH interface.
65    Enable SSH Protocol  ${False}
66
67    # Reboot BMC and verify persistency.
68    OBMC Reboot (off)
69
70    # Check if SSH is really disabled via Redfish.
71    Verify SSH Protocol State  ${False}
72
73    # Check if SSH login and commands fail.
74    ${status}=  Run Keyword And Return Status
75    ...  Verify SSH Login And Commands Work
76
77    Should Be Equal As Strings  ${status}  False
78    ...  msg=SSH Login and commands are working after disabling SSH.
79
80
81*** Keywords ***
82
83Enable SSH Protocol
84    [Documentation]  Enable or disable SSH protocol.
85    [Arguments]  ${enable_value}=${True}
86
87    # Description of argument(s}:
88    # enable_value  Enable or disable SSH, e.g. (true, false).
89
90    ${ssh_state}=  Create Dictionary  ProtocolEnabled=${enable_value}
91    ${data}=  Create Dictionary  SSH=${ssh_state}
92
93    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data}
94    ...  valid_status_codes=[${HTTP_NO_CONTENT}]
95
96    # Wait for timeout for new values to take effect.
97    Sleep  ${NETWORK_TIMEOUT}s
98
99
100Verify SSH Login And Commands Work
101    [Documentation]  Verify if SSH connection works and able to run command on SSH session.
102    [Teardown]  Close All Connections
103
104    # Check if we can open SSH connection and login.
105    Open Connection And Login
106
107    # Check if we can run command successfully on SSH session.
108    BMC Execute Command  /sbin/ip addr
109
110
111Verify SSH Protocol State
112    [Documentation]  verify SSH protocol state.
113    [Arguments]  ${state}=${True}
114
115    # Description of argument(s}:
116    # state  Enable or disable SSH, e.g. (true, false)
117
118    # Sample output:
119    # {
120    #   "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol",
121    #   "@odata.type": "#ManagerNetworkProtocol.v1_5_0.ManagerNetworkProtocol",
122    #   "Description": "Manager Network Service",
123    #   "FQDN": "bmc",
124    #  "HTTP": {
125    #    "Port": 0,
126    #    "ProtocolEnabled": false
127    #  },
128    #  "HTTPS": {
129    #    "Certificates": {
130    #      "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates"
131    #    },
132    #    "Port": xxx,
133    #    "ProtocolEnabled": true
134    #  },
135    #  "HostName": "xxxxbmc",
136    #  "IPMI": {
137    #    "Port": xxx,
138    #    "ProtocolEnabled": true
139    #  },
140    #  "Id": "NetworkProtocol",
141    #  "NTP": {
142    #    "NTPServers": [
143    #      "xx.xx.xx.xx",
144    #      "xx.xx.xx.xx",
145    #      "xx.xx.xx.xx"
146    #    ],
147    #    "ProtocolEnabled": true
148    #  },
149    #  "Name": "Manager Network Protocol",
150    #  "SSH": {
151    #    "Port": xx,
152    #    "ProtocolEnabled": true
153    #  },
154    #  "Status": {
155    #    "Health": "OK",
156    #    "HealthRollup": "OK",
157    #    "State": "Enabled"
158    #  }
159    # }
160
161    ${resp}=  Redfish.Get  ${REDFISH_NW_PROTOCOL_URI}
162    Should Be Equal As Strings  ${resp.dict['SSH']['ProtocolEnabled']}  ${state}
163    ...  msg=Protocol states are not matching.
164