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