1*** Settings ***
2Documentation   Module for testing BMC via XCAT.
3
4Resource        ../lib/xcat/resource.robot
5Resource        ../lib/xcat/xcat_utils.robot
6
7Library         OperatingSystem
8Library         String
9
10Suite Setup  Validate XCAT Setup
11Suite Teardown  Close All Connections
12
13*** Variables ***
14
15${poweron_flag}   ON
16${poweroff_flag}  OFF
17${NUM_POWER_STATUS_CHECKS}  1000
18
19*** Test Cases ***
20
21Add BMC Nodes To XCAT
22    [Documentation]  Connect and add BMC nodes.
23    [Tags]  Add_BMC_Nodes_To_XCAT
24
25    # Add BMC nodes one by one and check whether it is successfully added.
26    FOR  ${bmc}  IN  @{BMC_LIST}
27      Add Nodes To XCAT  ${bmc}
28      Validate Added Node  ${bmc}
29    END
30
31
32Power On Via XCAT And Validate
33    [Documentation]  Power on via XCAT and validate.
34    [Tags]  Power_On_Via_XCAT_And_Validate
35
36    # Power on each BMC node and validate the power status.
37    FOR  ${bmc}  IN  @{BMC_LIST}
38      Power On Via XCAT  ${bmc}
39      Validate Power Status Via XCAT  ${bmc}  ${poweron_flag}
40    END
41
42
43Power Off Via XCAT And Validate
44    [Documentation]  Power off via XCAT and validate.
45    [Tags]  Power_Off_Via_XCAT_And_Validate
46
47    # Power off each BMC node and validate the power status.
48    FOR  ${bmc}  IN  @{BMC_LIST}
49      Power Off Via XCAT  ${bmc}
50      Validate Power Status Via XCAT  ${bmc}  ${poweroff_flag}
51    END
52
53
54Add Nodes To Group List
55    [Documentation]  Add BMC nodes into group.
56    [Tags]  Add_Nodes_To_Group_List
57
58    # Add BMC nodes to group and validate.
59    FOR  ${bmc}  IN  @{BMC_LIST}
60      Add Nodes To Group  ${bmc}  ${GROUP}
61      Validate Node Added In Group  ${bmc}  ${GROUP}
62    END
63
64
65Power On Group And Validate
66    [Documentation]  Power on all BMCs in group and validate.
67    [Tags]  Power_On_Group_And_Validate
68
69    # Sample output of this keyword:
70    # XXX.XXX.XXX.XXX
71    # YYY.YYY.YYY.YYY
72    # ZZZ.ZZZ.ZZZ.ZZZ
73
74    ${nodes}=  Get List Of Nodes In Group  ${GROUP}
75    Should Not Be Empty  ${nodes}  msg=Group is empty.
76    Power On Via XCAT  ${GROUP}
77
78    # List the BMC nodes.
79
80    @{bmc_nodes}=  Split String  ${nodes}
81
82    # Validate power status on each BMC node one by one.
83    FOR  ${bmc_node}  IN  @{bmc_nodes}
84      Validate Power Status Via XCAT  ${bmc_node}  ${poweron_flag}
85    END
86
87
88Power Off Group And Validate
89    [Documentation]  Power off all BMCs in group and validate.
90    [Tags]  Power_Off_Group_And_Validate
91
92    # Sample output of this keyword:
93    # XXX.XXX.XXX.XXX
94    # YYY.YYY.YYY.YYY
95    # ZZZ.ZZZ.ZZZ.ZZZ
96
97    ${nodes}=  Get List Of Nodes In Group  ${GROUP}
98    Should Not Be Empty  ${nodes}  msg=Group is empty.
99    Power Off Via XCAT  ${GROUP}
100
101    # List the BMC nodes.
102    @{bmc_nodes}=  Split String  ${nodes}
103
104    # Validate power status on each BMC node one by one.
105    FOR  ${bmc_node}  IN  @{bmc_nodes}
106      Validate Power Status Via XCAT  ${bmc_node}  ${poweroff_flag}
107    END
108
109
110Continuous Node Power Status
111    [Documentation]  Continuously get the power status.
112    # This keyword verifies the REST connectivity between XCAT and the BMC node.
113    [Tags]  Continuous_Node_Power_Status
114
115    # Performing this operation only on one BMC node.
116
117    Power On Via XCAT  ${BMC_LIST[1]}
118
119    # Get the power status of the node repeatedly.
120    # By default it gets power status 1000 times.
121    # It basically stress the BMC node and test REST implementation
122    # of the BMC node
123
124    FOR  ${index}  IN RANGE  1  ${NUM_POWER_STATUS_CHECKS}
125      Validate Power Status Via XCAT  ${BMC_LIST[1]}  ${poweron_flag}
126    END
127
128
129Get Temperature Reading Via XCAT
130    [Documentation]  Get temperature reading via XCAT.
131    [Tags]  Get_Temperature_Reading_Via_XCAT
132
133    # Sample output of the keyword:
134    # node1: Ambient: 28.62 C
135    # node1: P0 Vcs Temp: 35 C
136    # node1: P0 Vdd Temp: 35 C
137    # node1: P0 Vddr Temp: 35 C
138    # node1: P0 Vdn Temp: 35 C
139    # node1: P1 Vcs Temp: 33 C
140    # node1: P1 Vdd Temp: 33 C
141    # node1: P1 Vddr Temp: 34 C
142    # node1: P1 Vdn Temp: 34 C
143
144    # Get temperature reading from each BMC node.
145
146    FOR  ${bmc}  IN  @{BMC_LIST}
147      ${temp_reading}=  Get Hardware Vitals Via XCAT  ${bmc}  temp
148      Should Match  ${temp_reading}  ${bmc}* C
149      Log  \n Temperature reading on $[bmc}\n ${temp_reading}
150    END
151
152
153Get Fanspeed Reading Via XCAT
154    [Documentation]  Get fanspeed via XCAT.
155    [Tags]  Get_Fanspeed_Reading_Via_XCAT
156
157    # Sample output of the keyword:
158    # node1: Fan0 0: 10714 RPMS
159    # node1: Fan1 0: 10216 RPMS
160    # node1: Fan2 0: 14124 RPMS
161    # node1: Fan3 0: 11114 RPMS
162
163    # Get fanspeed from each BMC node.
164
165    FOR  ${bmc}  IN  @{BMC_LIST}
166      ${fanspeed}=  Get Hardware Vitals Via XCAT  ${bmc}  fanspeed
167      Should Match  ${fanspeed}  ${bmc}* RPMS
168      Log  \n fanspeed on $[bmc}\n ${fanspeed}
169    END
170
171
172Get Voltage Reading Via XCAT
173    [Documentation]  Get voltage via XCAT.
174    [Tags]  Get_Voltage_Reading_Via_XCAT
175
176    # Sample output of the keyword:
177    # node1: No attributes returned from the BMC.
178    # BMC node is not returning anything, this will fail at present.
179
180    # Get voltage reading from each BMC node.
181
182    FOR  ${bmc}  IN  @{BMC_LIST}
183      ${voltage}=  Get Hardware Vitals Via XCAT  ${bmc}  voltage
184      Log  \n Voltage reading on $[bmc}\n ${voltage}
185    END
186
187
188Get Wattage Via XCAT
189    [Documentation]  Get wattage via XCAT.
190    [Tags]  Get_Wattage_Via_XCAT
191
192    # Sample output of the keyword:
193    # node1: No attributes returned from the BMC.
194    # BMC node is not returning anything, this will fail at present.
195
196    # Get wattage reading from each BMC node.
197
198    FOR  ${bmc}  IN  @{BMC_LIST}
199      ${wattage}=  Get Hardware Vitals Via XCAT  ${bmc}  wattage
200      Log  \n Wattage reading on $[bmc}\n ${wattage}
201    END
202
203*** Keywords ***
204
205Validate XCAT Setup
206    [Documentation]  Validate XCAT setup.
207
208    Open Connection And Login To XCAT
209
210    # Check if XCAT is installed.
211    ${cmd_output}=  Execute Command  ${XCAT_DIR_PATH}/lsxcatd -v
212    Should Not Be Empty  ${cmd_output}  msg=XCAT not installed.
213
214    Log  \n XCAT Version is: \n${cmd_output}
215
216    # Get all the BMC nodes from the config file.
217    ${nodes}=  Get List Of BMC Nodes
218    # Make a list of BMC nodes.
219    @{BMC_LIST}=  Split To Lines  ${nodes}
220    Log To Console  BMC nodes to be added:\n ${BMC_LIST}
221    Set Suite Variable  @{BMC_LIST}
222
223    # GROUP should not be empty.
224    Should Not Be EMPTY  ${GROUP}  msg=Group does not exist.
225
226Validate Power Status Via XCAT
227    [Documentation]  Validate power status.
228    [Arguments]  ${node}  ${flag}=ON
229
230    ${status}=  Get Power Status  ${node}
231    Run Keyword If  '${flag}' == 'ON'
232    ...  Should Contain  ${status}  on  msg=Host is off.
233    ...  ELSE  Should Contain  ${status}  off  msg=Host is on.
234