1*** Settings ***
2
3Documentation  Protocol settings utilities keywords.
4
5Resource         ../lib/resource.robot
6Resource         ../lib/utils.robot
7
8
9*** Keywords ***
10
11Enable SSH Protocol
12    [Documentation]  Enable or disable SSH protocol.
13    [Arguments]  ${enable_value}=${True}
14
15    # Description of argument(s}:
16    # enable_value  Enable or disable SSH, e.g. (true, false).
17
18    ${ssh_state}=  Create Dictionary  ProtocolEnabled=${enable_value}
19    ${data}=  Create Dictionary  SSH=${ssh_state}
20
21    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data}
22    ...  valid_status_codes=[${HTTP_NO_CONTENT}]
23
24    # Wait for timeout for new values to take effect.
25    Sleep  ${NETWORK_TIMEOUT}s
26
27
28Verify SSH Login And Commands Work
29    [Documentation]  Verify if SSH connection works and able to run command on SSH session.
30    [Teardown]  Close All Connections
31
32    # Check if we can open SSH connection and login.
33    Open Connection And Login
34
35    # Check if we can run command successfully on SSH session.
36    BMC Execute Command  /sbin/ip addr
37
38
39Verify SSH Protocol State
40    [Documentation]  verify SSH protocol state.
41    [Arguments]  ${state}=${True}
42
43    # Description of argument(s}:
44    # state  Enable or disable SSH, e.g. (true, false)
45
46    # Sample output:
47    # {
48    #   "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/NetworkProtocol",
49    #   "@odata.type": "#ManagerNetworkProtocol.v1_5_0.ManagerNetworkProtocol",
50    #   "Description": "Manager Network Service",
51    #   "FQDN": "bmc",
52    #  "HTTP": {
53    #    "Port": 0,
54    #    "ProtocolEnabled": false
55    #  },
56    #  "HTTPS": {
57    #    "Certificates": {
58    #      "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/NetworkProtocol/HTTPS/Certificates"
59    #    },
60    #    "Port": xxx,
61    #    "ProtocolEnabled": true
62    #  },
63    #  "HostName": "xxxxbmc",
64    #  "IPMI": {
65    #    "Port": xxx,
66    #    "ProtocolEnabled": true
67    #  },
68    #  "Id": "NetworkProtocol",
69    #  "NTP": {
70    #    "NTPServers": [
71    #      "xx.xx.xx.xx",
72    #      "xx.xx.xx.xx",
73    #      "xx.xx.xx.xx"
74    #    ],
75    #    "ProtocolEnabled": true
76    #  },
77    #  "Name": "Manager Network Protocol",
78    #  "SSH": {
79    #    "Port": xx,
80    #    "ProtocolEnabled": true
81    #  },
82    #  "Status": {
83    #    "Health": "OK",
84    #    "HealthRollup": "OK",
85    #    "State": "Enabled"
86    #  }
87
88    ${resp}=  Redfish.Get  ${REDFISH_NW_PROTOCOL_URI}
89    Should Be Equal As Strings  ${resp.dict['SSH']['ProtocolEnabled']}  ${state}
90    ...  msg=Protocol states are not matching.
91
92
93Enable IPMI Protocol
94    [Documentation]  Enable or disable IPMI protocol.
95    [Arguments]  ${enable_value}=${True}
96
97    # Description of argument(s}:
98    # enable_value  Enable or disable IPMI, e.g. (true, false).
99
100    ${ipmi_state}=  Create Dictionary  ProtocolEnabled=${enable_value}
101    ${data}=  Create Dictionary  IPMI=${ipmi_state}
102
103    Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data}
104    ...  valid_status_codes=[${HTTP_NO_CONTENT}]
105
106    # Wait for timeout for new values to take effect.
107    Sleep  ${NETWORK_TIMEOUT}s
108
109
110Verify IPMI Works
111    [Documentation]  Run IPMI command and return status.
112    [Arguments]  ${sub_cmd}  ${host}=${OPENBMC_HOST}
113
114    # Description of argument(s):
115    # host         BMC host name or IP address.
116    # sub_cmd      The IPMI command string to be executed.
117
118    ${rc}=  Run And Return Rc  ${cmd_prefix} -H ${host} ${sub_cmd}
119    Should Be Equal As Strings  ${rc}  0
120    ...  msg=IPMI is not enabled and commands are failing.
121
122
123Verify IPMI Protocol State
124    [Documentation]  Verify IPMI protocol state.
125    [Arguments]  ${state}=${True}
126
127    # Description of argument(s}:
128    # state  Enable or disable IPMI, e.g. (true, false)
129
130    ${resp}=  Redfish.Get  ${REDFISH_NW_PROTOCOL_URI}
131    Should Be Equal As Strings  ${resp.dict['IPMI']['ProtocolEnabled']}  ${state}
132    ...  msg=Protocol states are not matching.
133