1*** Settings ***
2Documentation  Test BMC manager protocol enable/disable functionality.
3
4Resource   ../../lib/bmc_redfish_resource.robot
5Resource   ../../lib/openbmc_ffdc.robot
6Resource   ../../lib/protocol_setting_utils.robot
7
8Suite Setup     Suite Setup Execution
9Suite Teardown  Run Keywords  Enable IPMI Protocol  ${initial_ipmi_state}  AND  Redfish.Logout
10Test Teardown   FFDC On Test Case Fail
11
12
13*** Variables ***
14
15${cmd_prefix}  ipmitool -I lanplus -C 17 -p 623 -U ${IPMI_USERNAME} -P ${IPMI_PASSWORD}
16
17
18*** Test Cases ***
19
20Verify SSH Is Enabled By Default
21    [Documentation]  Verify SSH is enabled by default.
22    [Tags]  Verify_SSH_Is_Enabled_By_Default
23
24    # Check if SSH is enabled by default.
25    Verify SSH Protocol State  ${True}
26
27
28Enable SSH Protocol And Verify
29    [Documentation]  Enable SSH protocol and verify.
30    [Tags]  Enable_SSH_Protocol_And_Verify
31
32    Enable SSH Protocol  ${True}
33
34    # Check if SSH is really enabled via Redfish.
35    Verify SSH Protocol State  ${True}
36
37    # Check if SSH login and commands on SSH session work.
38    Verify SSH Login And Commands Work
39
40
41Disable SSH Protocol And Verify
42    [Documentation]  Disable SSH protocol and verify.
43    [Tags]  Disable_SSH_Protocol_And_Verify
44    [Teardown]  Enable SSH Protocol  ${True}
45
46    # Disable SSH interface.
47    Enable SSH Protocol  ${False}
48
49    # Check if SSH is really disabled via Redfish.
50    Verify SSH Protocol State  ${False}
51
52    # Check if SSH login and commands fail.
53    ${status}=  Run Keyword And Return Status
54    ...  Verify SSH Login And Commands Work
55
56    Should Be Equal As Strings  ${status}  False
57    ...  msg=SSH Login and commands are working after disabling SSH.
58
59
60Enable SSH Protocol And Check Persistency On BMC Reboot
61    [Documentation]  Enable SSH protocol and verify persistency.
62    [Tags]  Enable_SSH_Protocol_And_Check_Persistency_On_BMC_Reboot
63
64    Enable SSH Protocol  ${True}
65
66    # Reboot BMC and verify persistency.
67    Redfish OBMC Reboot (off)  stack_mode=skip
68
69    # Check if SSH is really enabled via Redfish.
70    Verify SSH Protocol State  ${True}
71
72    # Check if SSH login and commands on SSH session work.
73    Verify SSH Login And Commands Work
74
75
76Disable SSH Protocol And Check Persistency On BMC Reboot
77    [Documentation]  Disable SSH protocol and verify persistency.
78    [Tags]  Disable_SSH_Protocol_And_Check_Persistency_On_BMC_Reboot
79    [Teardown]  Enable SSH Protocol  ${True}
80
81    # Disable SSH interface.
82    Enable SSH Protocol  ${False}
83
84    # Reboot BMC and verify persistency.
85    Redfish OBMC Reboot (off)  stack_mode=skip
86
87    # Check if SSH is really disabled via Redfish.
88    Verify SSH Protocol State  ${False}
89
90    # Check if SSH login and commands fail.
91    ${status}=  Run Keyword And Return Status
92    ...  Verify SSH Login And Commands Work
93
94    Should Be Equal As Strings  ${status}  False
95    ...  msg=SSH Login and commands are working after disabling SSH.
96
97
98Verify Disabling SSH Port Does Not Disable Serial Console Port
99    [Documentation]  Verify disabling SSH does not disable serial console port.
100    [Tags]  Verify_Disabling_SSH_Port_Does_Not_Disable_Serial_Console_Port
101    [Teardown]  Enable SSH Protocol  ${True}
102
103    # Disable SSH interface.
104    Enable SSH Protocol  ${False}
105
106    # Check able to establish connection with serial port console.
107    Open Connection And Log In  host=${OPENBMC_HOST}  port=2200
108    Close All Connections
109
110
111Verify Existing SSH Session Gets Closed On Disabling SSH
112    [Documentation]  Verify existing SSH session gets closed on disabling ssh.
113    [Tags]  Verify_Existing_SSH_Session_Gets_Closed_On_Disabling_SSH
114    [Teardown]  Enable SSH Protocol  ${True}
115
116    # Open SSH connection.
117    Open Connection And Login
118
119    # Disable SSH interface.
120    Enable SSH Protocol  ${False}
121
122    # Check if SSH is really disabled via Redfish.
123    Verify SSH Protocol State  ${False}
124
125    # Try to execute CLI command on SSH connection.
126    # It should fail as disable SSH will close pre existing sessions.
127    ${status}=  Run Keyword And Return Status
128    ...  BMC Execute Command  /sbin/ip addr
129
130    Should Be Equal As Strings  ${status}  False
131    ...  msg=Disabling SSH has not closed existing SSH sessions.
132
133
134Enable IPMI Protocol And Verify
135    [Documentation]  Enable IPMI protocol and verify.
136    [Tags]  Enable_IPMI_Protocol_And_Verify
137
138    Enable IPMI Protocol  ${True}
139
140    # Check if IPMI is really enabled via Redfish.
141    Verify IPMI Protocol State  ${True}
142
143    # Check if IPMI commands starts working.
144    Verify IPMI Works  lan print
145
146
147Disable IPMI Protocol And Verify
148    [Documentation]  Disable IPMI protocol and verify.
149    [Tags]  Disable_IPMI_Protocol_And_Verify
150
151    # Disable IPMI interface.
152    Enable IPMI Protocol  ${False}
153
154    # Check if IPMI is really disabled via Redfish.
155    Verify IPMI Protocol State  ${False}
156
157    # Check if IPMI commands fail.
158    ${status}=  Run Keyword And Return Status
159    ...  Verify IPMI Works  lan print
160
161    Should Be Equal As Strings  ${status}  False
162    ...  msg=IPMI commands are working after disabling IPMI.
163
164
165Enable IPMI Protocol And Check Persistency On BMC Reboot
166    [Documentation]  Set the IPMI protocol attribute to True, reset BMC, and verify
167    ...              that the setting persists.
168    [Tags]  Enable_IPMI_Protocol_And_Check_Persistency_On_BMC_Reboot
169
170    Enable IPMI Protocol  ${True}
171
172    Redfish OBMC Reboot (off)  stack_mode=skip
173
174    # Check if the IPMI enabled is set.
175    Verify IPMI Protocol State  ${True}
176
177    # Confirm that IPMI commands to access BMC work.
178    Verify IPMI Works  lan print
179
180
181Disable IPMI Protocol And Check Persistency On BMC Reboot
182    [Documentation]  Set the IPMI protocol attribute to False, reset BMC, and verify
183    ...              that the setting persists.
184    [Tags]  Disable_IPMI_Protocol_And_Check_Persistency_On_BMC_Reboot
185
186    # Disable IPMI interface.
187    Enable IPMI Protocol  ${False}
188
189    Redfish OBMC Reboot (off)  stack_mode=skip
190
191    # Check if the IPMI disabled is set.
192    Verify IPMI Protocol State  ${False}
193
194    # Confirm that IPMI connection request fails.
195    ${status}=  Run Keyword And Return Status
196    ...  Verify IPMI Works  lan print
197
198    Should Be Equal As Strings  ${status}  False
199    ...  msg=IPMI commands are working after disabling IPMI.
200
201
202Enable SSH And IPMI Protocol And Check Persistency On BMC Reboot
203    [Documentation]  Set the SSH and IPMI protocol attributes to True, and verify
204    ...              that the setting attribute value is boolean True after BMC reboot.
205    [Tags]  Enable_SSH_And_IPMI_Protocol_And_Check_Persistency_On_BMC_Reboot
206
207    Set SSH And IPMI Protocol  ${True}  ${True}
208
209    # Check if SSH and IPMI enabled is set.
210    Verify SSH Protocol State  ${True}
211    Sleep  ${NETWORK_TIMEOUT}s
212    Verify IPMI Protocol State  ${True}
213
214    Redfish OBMC Reboot (off)  stack_mode=skip
215
216    # Check if SSH login and IPMI commands work.
217    Verify SSH Login And Commands Work
218    Verify IPMI Works  lan print
219
220
221Configure SSH And IPMI Settings And Verify
222    [Documentation]  Set the SSH and IPMI protocol attribute to True/False, and verify.
223    [Tags]  Configure_SSH_And_IPMI_Settings_And_Verify
224    [Template]  Set SSH And IPMI Protocol
225    [Teardown]  Enable SSH Protocol  ${True}
226
227    # ssh_state  ipmi_state
228    ${True}      ${False}
229    ${True}      ${True}
230    ${False}     ${True}
231    ${False}     ${False}
232
233
234*** Keywords ***
235
236Suite Setup Execution
237    [Documentation]  Do suite setup tasks.
238
239    Redfish.Login
240
241    ${state}=  Run Keyword And Return Status  Verify IPMI Protocol State
242    Set Suite Variable  ${initial_ipmi_state}  ${state}
243    Sleep  ${NETWORK_TIMEOUT}s
244
245Is BMC LastResetTime Changed
246    [Documentation]  return fail if BMC last reset time is not changed
247    [Arguments]  ${reset_time}
248
249    ${last_reset_time}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  LastResetTime
250    Should Not Be Equal  ${last_reset_time}  ${reset_time}
251
252
253Redfish BMC Reboot
254    [Documentation]  Use Redfish API reboot BMC and wait for BMC ready
255
256    #  Get BMC last reset time for compare
257    ${last_reset_time}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  LastResetTime
258
259    # Reboot BMC by Redfish API
260    Redfish BMC Reset Operation
261
262    # Wait for BMC real reboot and Redfish API ready
263    Wait Until Keyword Succeeds  3 min  10 sec  Is BMC LastResetTime Changed  ${last_reset_time}
264
265
266Set SSH And IPMI Protocol
267    [Documentation]  Set SSH and IPMI protocol state.
268    [Arguments]  ${ssh_state}  ${ipmi_state}
269
270    # Description of argument(s):
271    # ssh_state     State of SSH to be set (e.g. True, False).
272    # ipmi_state    State of IPMI to be set (e.g. True, False).
273
274    ${ssh_protocol_state}=  Create Dictionary  ProtocolEnabled=${ssh_state}
275    ${ipmi_protocol_state}=  Create Dictionary  ProtocolEnabled=${ipmi_state}
276    ${data}=  Create Dictionary  SSH=${ssh_protocol_state}  IPMI=${ipmi_protocol_state}
277
278    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data}
279    ...  valid_status_codes=[${HTTP_NO_CONTENT}]
280
281    # Wait for timeout for new values to take effect.
282    Sleep  ${NETWORK_TIMEOUT}s
283
284    Verify Protocol State  ${ssh_state}  ${ipmi_state}
285
286
287Verify Protocol State
288    [Documentation]  Verify SSH and IPMI protocol state.
289    [Arguments]  ${ssh_state}  ${ipmi_state}
290
291    # Description of argument(s):
292    # ssh_state     State of SSH to be verified (e.g. True, False).
293    # ipmi_state    State of IPMI to be verified (e.g. True, False).
294
295    # Verify SSH state value.
296    ${status}=  Run Keyword And Return Status
297    ...  Verify SSH Login And Commands Work
298    Should Be Equal As Strings  ${status}  ${ssh_state}
299    ...  msg=SSH states are not matching.
300
301    # Verify IPMI state value.
302    ${status}=  Run Keyword And Return Status
303    ...  Verify IPMI Works  lan print
304
305    Should Be Equal As Strings  ${status}  ${ipmi_state}
306    ...  msg=IPMI states are not matching.
307