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 Verify
203    [Documentation]  Set the SSH and IPMI protocol attributes to True, and verify
204    ...              that the setting attribute value is boolean True.
205    [Tags]  Enable_SSH_And_IPMI_Protocol_And_Verify
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    # Check if SSH login and IPMI commands work.
215    Verify SSH Login And Commands Work
216    Verify IPMI Works  lan print
217
218
219Disable SSH And IPMI Protocol And Verify
220    [Documentation]  Set the SSH and IPMI protocol attributes to False, and verify
221    ...              that both SSH login and IPMI commands does not work.
222    [Tags]  Disable_SSH_And_IPMI_Protocol_And_Verify
223    [Teardown]  Enable SSH Protocol  ${True}
224
225    Set SSH And IPMI Protocol  ${False}  ${False}
226
227    # Check if SSH login and commands fail.
228    ${status}=  Run Keyword And Return Status
229    ...  Verify SSH Login And Commands Work
230
231    Should Be Equal As Strings  ${status}  False
232    ...  msg=SSH Login and commands are working after disabling SSH.
233
234    # Check if IPMI commands fail.
235    ${status}=  Run Keyword And Return Status
236    ...  Verify IPMI Works  lan print
237
238    Should Be Equal As Strings  ${status}  False
239    ...  msg=IPMI commands are working after disabling IPMI.
240
241
242Enable SSH And Disable IPMI And Verify
243    [Documentation]   Set the SSH protocol attribute to True and IPMI protocol attribute to False, and verify
244    ...               that SSH login works and IPMI command does not work.
245    [Tags]  Enable_SSH_And_Disable_IPMI_And_Verify
246
247    Set SSH And IPMI Protocol  ${True}  ${False}
248
249    Verify SSH Login And Commands Work
250
251    # Check if IPMI commands fail.
252    ${status}=  Run Keyword And Return Status
253    ...  Verify IPMI Works  lan print
254
255    Should Be Equal As Strings  ${status}  False
256    ...  msg=IPMI commands are working after disabling IPMI.
257
258
259*** Keywords ***
260
261Suite Setup Execution
262    [Documentation]  Do suite setup tasks.
263
264    Redfish.Login
265
266    ${state}=  Run Keyword And Return Status  Verify IPMI Protocol State
267    Set Suite Variable  ${initial_ipmi_state}  ${state}
268
269
270Is BMC LastResetTime Changed
271    [Documentation]  return fail if BMC last reset time is not changed
272    [Arguments]  ${reset_time}
273
274    ${last_reset_time}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  LastResetTime
275    Should Not Be Equal  ${last_reset_time}  ${reset_time}
276
277
278Redfish BMC Reboot
279    [Documentation]  Use Redfish API reboot BMC and wait for BMC ready
280
281    #  Get BMC last reset time for compare
282    ${last_reset_time}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  LastResetTime
283
284    # Reboot BMC by Redfish API
285    Redfish BMC Reset Operation
286
287    # Wait for BMC real reboot and Redfish API ready
288    Wait Until Keyword Succeeds  3 min  10 sec  Is BMC LastResetTime Changed  ${last_reset_time}
289
290
291Set SSH And IPMI Protocol
292    [Documentation]  Set SSH and IPMI protocol state.
293    [Arguments]  ${ssh_state}  ${ipmi_state}
294
295    # Description of argument(s):
296    # ssh_state     state of SSH to be set(e.g. True, False).
297    # ipmi_state    state of IPMI to be set(e.g. True, False).
298
299    ${ssh_protocol_state}=  Create Dictionary  ProtocolEnabled=${ssh_state}
300    ${ipmi_protocol_state}=  Create Dictionary  ProtocolEnabled=${ipmi_state}
301    ${data}=  Create Dictionary  SSH=${ssh_protocol_state}  IPMI=${ipmi_protocol_state}
302
303    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data}
304    ...  valid_status_codes=[${HTTP_NO_CONTENT}]
305
306    # Wait for timeout for new values to take effect.
307    Sleep  ${NETWORK_TIMEOUT}s
308