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 ${OPENBMC_USERNAME} -P ${OPENBMC_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    [Teardown]  Enable SSH Protocol  ${True}
44
45    # Disable SSH interface.
46    Enable SSH Protocol  ${False}
47
48    # Check if SSH is really disabled via Redfish.
49    Verify SSH Protocol State  ${False}
50
51    # Check if SSH login and commands fail.
52    ${status}=  Run Keyword And Return Status
53    ...  Verify SSH Login And Commands Work
54
55    Should Be Equal As Strings  ${status}  False
56    ...  msg=SSH Login and commands are working after disabling SSH.
57
58
59Enable SSH Protocol And Check Persistency On BMC Reboot
60    [Documentation]  Enable SSH protocol and verify persistency.
61
62    Enable SSH Protocol  ${True}
63
64    # Reboot BMC and verify persistency.
65    OBMC Reboot (off)
66
67    # Check if SSH is really enabled via Redfish.
68    Verify SSH Protocol State  ${True}
69
70    # Check if SSH login and commands on SSH session work.
71    Verify SSH Login And Commands Work
72
73
74Disable SSH Protocol And Check Persistency On BMC Reboot
75    [Documentation]  Disable SSH protocol and verify persistency.
76    [Teardown]  Enable SSH Protocol  ${True}
77
78    # Disable SSH interface.
79    Enable SSH Protocol  ${False}
80
81    # Reboot BMC and verify persistency.
82    Redfish BMC Reboot
83
84    # Check if SSH is really disabled via Redfish.
85    Verify SSH Protocol State  ${False}
86
87    # Check if SSH login and commands fail.
88    ${status}=  Run Keyword And Return Status
89    ...  Verify SSH Login And Commands Work
90
91    Should Be Equal As Strings  ${status}  False
92    ...  msg=SSH Login and commands are working after disabling SSH.
93
94
95Verify Disabling SSH Port Does Not Disable Serial Console Port
96    [Documentation]  Verify disabling SSH does not disable serial console port.
97    [Tags]  Verify_Disabling_SSH_Port_Does_Not_Disable_Serial_Console_Port
98    [Teardown]  Enable SSH Protocol  ${True}
99
100    # Disable SSH interface.
101    Enable SSH Protocol  ${False}
102
103    # Check able to establish connection with serial port console.
104    Open Connection And Log In  host=${OPENBMC_HOST}  port=2200
105    Close All Connections
106
107
108Verify Existing SSH Session Gets Closed On Disabling SSH
109    [Documentation]  Verify existing SSH session gets closed on disabling ssh.
110    [Tags]  Verify_Existing_SSH_Session_Gets_Closed_On_Disabling_SSH
111    [Teardown]  Enable SSH Protocol  ${True}
112
113    # Open SSH connection.
114    Open Connection And Login
115
116    # Disable SSH interface.
117    Enable SSH Protocol  ${False}
118
119    # Check if SSH is really disabled via Redfish.
120    Verify SSH Protocol State  ${False}
121
122    # Try to execute CLI command on SSH connection.
123    # It should fail as disable SSH will close pre existing sessions.
124    ${status}=  Run Keyword And Return Status
125    ...  BMC Execute Command  /sbin/ip addr
126
127    Should Be Equal As Strings  ${status}  False
128    ...  msg=Disabling SSH has not closed existing SSH sessions.
129
130
131Enable IPMI Protocol And Verify
132    [Documentation]  Enable IPMI protocol and verify.
133    [Tags]  Enable_IPMI_Protocol_And_Verify
134
135    Enable IPMI Protocol  ${True}
136
137    # Check if IPMI is really enabled via Redfish.
138    Verify IPMI Protocol State  ${True}
139
140    # Check if IPMI commands starts working.
141    Verify IPMI Works  lan print
142
143
144Disable IPMI Protocol And Verify
145    [Documentation]  Disable IPMI protocol and verify.
146    [Tags]  Disable_IPMI_Protocol_And_Verify
147
148    # Disable IPMI interface.
149    Enable IPMI Protocol  ${False}
150
151    # Check if IPMI is really disabled via Redfish.
152    Verify IPMI Protocol State  ${False}
153
154    # Check if IPMI commands fail.
155    ${status}=  Run Keyword And Return Status
156    ...  Verify IPMI Works  lan print
157
158    Should Be Equal As Strings  ${status}  False
159    ...  msg=IPMI commands are working after disabling IPMI.
160
161
162Enable IPMI Protocol And Check Persistency On BMC Reboot
163    [Documentation]  Set the IPMI protocol attribute to True, reset BMC, and verify that the setting persists.
164    [Tags]  Enable_IPMI_Protocol_And_Check_Persistency_On_BMC_Reboot
165
166    Enable IPMI Protocol  ${True}
167
168    Redfish OBMC Reboot (off)  stack_mode=skip
169
170    # Check if the IPMI enabled is set.
171    Verify IPMI Protocol State  ${True}
172
173    # Confirm that IPMI commands to access BMC work.
174    Verify IPMI Works  lan print
175
176
177Disable IPMI Protocol And Check Persistency On BMC Reboot
178    [Documentation]  Set the IPMI protocol attribute to False, reset BMC, and verify that the setting persists.
179    [Tags]  Disable_IPMI_Protocol_And_Check_Persistency_On_BMC_Reboot
180
181    # Disable IPMI interface.
182    Enable IPMI Protocol  ${False}
183
184    Redfish OBMC Reboot (off)  stack_mode=skip
185
186    # Check if the IPMI disabled is set.
187    Verify IPMI Protocol State  ${False}
188
189    # Confirm that IPMI connection request fails.
190    ${status}=  Run Keyword And Return Status
191    ...  Verify IPMI Works  lan print
192
193    Should Be Equal As Strings  ${status}  False
194    ...  msg=IPMI commands are working after disabling IPMI.
195
196
197*** Keywords ***
198
199Suite Setup Execution
200    [Documentation]  Do suite setup tasks.
201
202    Redfish.Login
203
204    ${state}=  Run Keyword And Return Status  Verify IPMI Protocol State
205    Set Suite Variable  ${initial_ipmi_state}  ${state}
206
207
208Is BMC LastResetTime Changed
209    [Documentation]  return fail if BMC last reset time is not changed
210    [Arguments]  ${reset_time}
211
212    ${last_reset_time}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  LastResetTime
213    Should Not Be Equal  ${last_reset_time}  ${reset_time}
214
215
216Redfish BMC Reboot
217    [Documentation]  Use Redfish API reboot BMC and wait for BMC ready
218
219    #  Get BMC last reset time for compare
220    ${last_reset_time}=  Redfish.Get Attribute  /redfish/v1/Managers/bmc  LastResetTime
221
222    # Reboot BMC by Redfish API
223    Redfish BMC Reset Operation
224
225    # Wait for BMC real reboot and Redfish API ready
226    Wait Until Keyword Succeeds  3 min  10 sec  Is BMC LastResetTime Changed  ${last_reset_time}
227
228