blob: 8e624c7ea4f202a67f395303f136de2c7b1fd7c4 [file] [log] [blame]
Kailash6f5acb62019-08-28 14:38:45 -07001# Copyright 2017-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# voltctl common functions
16
17*** Settings ***
18Documentation Library for various utilities
19Library SSHLibrary
20Library HttpLibrary.HTTP
21Library String
22Library DateTime
23Library Process
24Library Collections
25Library RequestsLibrary
26Library OperatingSystem
27
28*** Keywords ***
Gilles Depatieb5682f82019-10-31 10:39:45 -040029Test Empty Device List
30 [Documentation] Verify that there are no devices in the system
31 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
32 Should Be Equal As Integers ${rc} 0
33 ${jsondata}= To Json ${output}
34 Log ${jsondata}
35 ${length}= Get Length ${jsondata}
David Bainbridgef81cd642019-11-20 00:14:47 +000036 Should Be Equal As Integers ${length} 0
Gilles Depatieb5682f82019-10-31 10:39:45 -040037
Kailash6f5acb62019-08-28 14:38:45 -070038Create Device
39 [Arguments] ${ip} ${port}
You Wang2b550642019-10-07 14:39:48 -070040 [Documentation] Creates a device in VOLTHA
Kailash6f5acb62019-08-28 14:38:45 -070041 #create/preprovision device
Gilles Depatie675a2062019-10-22 12:44:42 -040042 ${rc} ${device_id}= Run and Return Rc and Output
43 ... ${VOLTCTL_CONFIG}; voltctl device create -t openolt -H ${ip}:${port}
Kailash6f5acb62019-08-28 14:38:45 -070044 Should Be Equal As Integers ${rc} 0
45 [Return] ${device_id}
46
47Enable Device
48 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -070049 [Documentation] Enables a device in VOLTHA
Kailash6f5acb62019-08-28 14:38:45 -070050 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device enable ${device_id}
51 Should Be Equal As Integers ${rc} 0
52
Suchitra Vemuri6db89412019-11-14 14:52:54 -080053Disable Device
54 [Arguments] ${device_id}
55 [Documentation] Enables a device in VOLTHA
56 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${device_id}
57 Should Be Equal As Integers ${rc} 0
58
David Bainbridgef81cd642019-11-20 00:14:47 +000059Disable Devices In Voltha
60 [Documentation] Disables all the known devices in voltha
61 [Arguments] ${filter}
62 ${arg}= Set Variable ${EMPTY}
63 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
64 ${rc} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list ${arg} --orderby Root -q | xargs echo -n
65 Should Be Equal As Integers ${rc} 0
66 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${devices}
67 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
68
69Test Devices Disabled In Voltha
70 [Documentation] Tests to verify that all devices in VOLTHA are disabled
71 [Arguments] ${filter}
72 ${rc} ${count}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list --filter '${filter},AdminState!=DISABLED' -q | wc -l
73 Should Be Equal As Integers ${rc} 0
74 Should Be Equal As Integers ${count} 0
75
76Delete Devices In Voltha
77 [Documentation] Disables all the known devices in voltha
78 [Arguments] ${filter}
79 ${arg}= Set Variable ${EMPTY}
80 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
81 ${rc} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list ${arg} --orderby Root -q | xargs echo -n
82 Should Be Equal As Integers ${rc} 0
83 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device delete ${devices}
84 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
85
Suchitra Vemuri00d147d2019-09-13 13:07:32 -070086Get Device Flows from Voltha
87 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -070088 [Documentation] Gets device flows from VOLTHA
Suchitra Vemuri00d147d2019-09-13 13:07:32 -070089 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device flows ${device_id}
90 Should Be Equal As Integers ${rc} 0
91 [Return] ${output}
92
93Get Logical Device Output from Voltha
94 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -070095 [Documentation] Gets logicaldevice flows and ports from VOLTHA
Suchitra Vemuri00d147d2019-09-13 13:07:32 -070096 ${rc1} ${flows}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${device_id}
97 ${rc2} ${ports}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice ports ${device_id}
98 Log ${flows}
99 Log ${ports}
100 Should Be Equal As Integers ${rc1} 0
101 Should Be Equal As Integers ${rc2} 0
102
103Get Device Output from Voltha
104 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700105 [Documentation] Gets device flows and ports from VOLTHA
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700106 ${rc1} ${flows}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device flows ${device_id}
107 ${rc2} ${ports}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device ports ${device_id}
108 Log ${flows}
109 Log ${ports}
110 Should Be Equal As Integers ${rc1} 0
111 Should Be Equal As Integers ${rc2} 0
112
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800113Get Device List from Voltha
114 [Documentation] Gets Device List Output from Voltha
115 ${rc1} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list
116 Log ${devices}
117 Should Be Equal As Integers ${rc1} 0
118
Kailash6f5acb62019-08-28 14:38:45 -0700119Validate Device
Gilles Depatieb5682f82019-10-31 10:39:45 -0400120 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${serial_number}=${EMPTY} ${device_id}=${EMPTY}
121 ... ${onu_reason}=${EMPTY} ${onu}=False
122 [Documentation] Parses the output of "voltctl device list" and inspects device ${serial_number} and ${device_id}
Kailash6f5acb62019-08-28 14:38:45 -0700123 ... Arguments are matched for device states of: "admin_state", "oper_status", and "connect_status"
Gilles Depatieb5682f82019-10-31 10:39:45 -0400124 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
125 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700126 ${jsondata}= To Json ${output}
Kailash6f5acb62019-08-28 14:38:45 -0700127 ${length}= Get Length ${jsondata}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700128 FOR ${INDEX} IN RANGE 0 ${length}
129 ${value}= Get From List ${jsondata} ${INDEX}
130 ${astate}= Get From Dictionary ${value} adminstate
131 ${opstatus}= Get From Dictionary ${value} operstatus
132 ${cstatus}= Get From Dictionary ${value} connectstatus
133 ${sn}= Get From Dictionary ${value} serialnumber
Gilles Depatieb5682f82019-10-31 10:39:45 -0400134 ${devId}= Get From Dictionary ${value} id
Zack Williamsec53a1b2019-09-16 15:50:52 -0700135 ${mib_state}= Get From Dictionary ${value} reason
Gilles Depatieb5682f82019-10-31 10:39:45 -0400136 Run Keyword If '${sn}' == '${serial_number}' or '${devId}' == '${device_id}' Exit For Loop
Zack Williamsec53a1b2019-09-16 15:50:52 -0700137 END
Matteo Scandolo5e10b282019-11-25 10:54:32 -0700138 Log ${value}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400139 Should Be Equal '${astate}' '${admin_state}' Device ${serial_number} admin_state != ${admin_state}
Gilles Depatie675a2062019-10-22 12:44:42 -0400140 ... values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400141 Should Be Equal '${opstatus}' '${oper_status}' Device ${serial_number} oper_status != ${oper_status}
142 ... values=False
143 Should Be Equal '${cstatus}' '${connect_status}' Device ${serial_number} conn_status != ${connect_status}
144 ... values=False
145 Run Keyword If '${onu}' == 'True' Should Be Equal '${mib_state}' '${onu_reason}'
146 ... Device ${serial_number} mib_state incorrect (${mib_state}) values=False
147
148Validate OLT Device
149 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${serial_number}=${EMPTY}
150 ... ${device_id}=${EMPTY}
151 [Documentation] Parses the output of "voltctl device list" and inspects device ${serial_number} and/or
152 ... ${device_id} Match on OLT Serial number or Device Id and inspect states
153 Validate Device ${admin_state} ${oper_status} ${connect_status} ${serial_number} ${device_id}
154
155Validate ONU Devices
156 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${List_ONU_Serial}
157 [Documentation] Parses the output of "voltctl device list" and inspects device ${List_ONU_Serial}
158 ... Iteratively match on each Serial number contained in ${List_ONU_Serial} and inspect
159 ... states including MIB state
160 FOR ${serial_number} IN @{List_ONU_Serial}
161 Validate Device ${admin_state} ${oper_status} ${connect_status} ${serial_number}
162 ... onu_reason=omci-flows-pushed onu=True
163 END
164
165Validate Device Port Types
166 [Arguments] ${device_id} ${pon_type} ${ethernet_type}
167 [Documentation] Parses the output of voltctl device ports <device_id> and matches the port types listed
168 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device ports ${device_id} -o json
169 Should Be Equal As Integers ${rc} 0
170 ${jsondata}= To Json ${output}
171 Log ${jsondata}
172 ${length}= Get Length ${jsondata}
173 FOR ${INDEX} IN RANGE 0 ${length}
174 ${value}= Get From List ${jsondata} ${INDEX}
175 ${astate}= Get From Dictionary ${value} adminstate
176 ${opstatus}= Get From Dictionary ${value} operstatus
177 ${type}= Get From Dictionary ${value} type
178 Should Be Equal '${astate}' 'ENABLED' Device ${device_id} port admin_state != ENABLED values=False
179 Should Be Equal '${opstatus}' 'ACTIVE' Device ${device_id} port oper_status != ACTIVE values=False
180 Should Be True '${type}' == '${pon_type}' or '${type}' == '${ethernet_type}'
181 ... Device ${device_id} port type is neither ${pon_type} or ${ethernet_type}
182 END
183
184Validate OLT Port Types
185 [Documentation] Parses the output of voltctl device ports ${olt_device_id} and matches the port types listed
186 [Arguments] ${pon_type} ${ethernet_type}
187 Validate Device Port Types ${olt_device_id} ${pon_type} ${ethernet_type}
188
189Validate ONU Port Types
190 [Arguments] ${List_ONU_Serial} ${pon_type} ${ethernet_type}
191 [Documentation] Parses the output of voltctl device ports for each ONU SN listed in ${List_ONU_Serial}
192 ... and matches the port types listed
193 FOR ${serial_number} IN @{List_ONU_Serial}
194 ${onu_dev_id}= Get Device ID From SN ${serial_number}
195 Validate Device Port Types ${onu_dev_id} ${pon_type} ${ethernet_type}
196 END
197
198Validate Device Flows
199 [Arguments] ${device_id} ${test}=${EMPTY}
200 [Documentation] Parses the output of voltctl device flows <device_id> and expects flow count > 0
201 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device flows ${device_id} -o json
202 Should Be Equal As Integers ${rc} 0
203 ${jsondata}= To Json ${output}
204 Log ${jsondata}
205 ${length}= Get Length ${jsondata}
206 Log 'Number of flows = ' ${length}
207 Run Keyword If '${test}' == '${EMPTY}' Should Be True ${length} > 0
208 ... Number of flows for ${device_id} was 0
209 ... ELSE Should Be True ${length} == ${test}
210 ... Number of flows for ${device_id} was not ${test}
211
212Validate OLT Flows
213 [Documentation] Parses the output of voltctl device flows ${olt_device_id} and expects flow count > 0
214 Validate Device Flows ${olt_device_id}
215
216Validate ONU Flows
217 [Arguments] ${List_ONU_Serial} ${test}
218 [Documentation] Parses the output of voltctl device flows for each ONU SN listed in ${List_ONU_Serial}
219 ... and expects flow count == 0
220 FOR ${serial_number} IN @{List_ONU_Serial}
221 ${onu_dev_id}= Get Device ID From SN ${serial_number}
222 Validate Device Flows ${onu_dev_id} ${test}
223 END
224
225Validate Logical Device
226 [Documentation] Validate Logical Device is listed
227 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice list -o json
228 Should Be Equal As Integers ${rc} 0
229 ${jsondata}= To Json ${output}
230 Log ${jsondata}
231 ${length}= Get Length ${jsondata}
232 FOR ${INDEX} IN RANGE 0 ${length}
233 ${value}= Get From List ${jsondata} ${INDEX}
234 ${devid}= Get From Dictionary ${value} id
235 ${rootdev}= Get From Dictionary ${value} rootdeviceid
236 ${sn}= Get From Dictionary ${value} serialnumber
237 Exit For Loop
238 END
239 Should Be Equal '${rootdev}' '${olt_device_id}' Root Device does not match ${olt_device_id} values=False
240 Should Be Equal '${sn}' '${BBSIM_OLT_SN}' Logical Device ${sn} does not match ${BBSIM_OLT_SN}
241 ... values=False
242 [Return] ${devid}
243
244Validate Logical Device Ports
245 [Arguments] ${logical_device_id}
246 [Documentation] Validate Logical Device Ports are listed and are > 0
247 ${rc} ${output}= Run and Return Rc and Output
248 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice ports ${logical_device_id} -o json
249 Should Be Equal As Integers ${rc} 0
250 ${jsondata}= To Json ${output}
251 Log ${jsondata}
252 ${length}= Get Length ${jsondata}
253 Should Be True ${length} > 0 Number of ports for ${logical_device_id} was 0
254
255Validate Logical Device Flows
256 [Arguments] ${logical_device_id}
257 [Documentation] Validate Logical Device Flows are listed and are > 0
258 ${rc} ${output}= Run and Return Rc and Output
259 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${logical_device_id} -o json
260 Should Be Equal As Integers ${rc} 0
261 ${jsondata}= To Json ${output}
262 Log ${jsondata}
263 ${length}= Get Length ${jsondata}
264 Should Be True ${length} > 0 Number of flows for ${logical_device_id} was 0
265
266Retrieve Peer List From OLT
267 [Arguments] ${olt_peer_list}
268 [Documentation] Retrieve the list of peer device id list from port list
269 ${rc} ${output}= Run and Return Rc and Output
270 ... ${VOLTCTL_CONFIG}; voltctl device ports ${olt_device_id} -o json
271 Should Be Equal As Integers ${rc} 0
272 ${jsondata}= To Json ${output}
273 Log ${jsondata}
274 ${length}= Get Length ${jsondata}
275 FOR ${INDEX} IN RANGE 0 ${length}
276 ${value}= Get From List ${jsondata} ${INDEX}
277 ${type}= Get From Dictionary ${value} type
278 ${peers}= Get From Dictionary ${value} peers
279 Run Keyword If '${type}' == 'PON_OLT' Exit For Loop
280 END
281 ${length}= Get Length ${peers}
282 FOR ${INDEX} IN RANGE 0 ${length}
283 ${value}= Get From List ${peers} ${INDEX}
284 ${peer_id}= Get From Dictionary ${value} deviceid
285 Append To List ${olt_peer_list} ${peer_id}
286 END
287
288Validate OLT Peer Id List
289 [Arguments] ${olt_peer_id_list}
290 [Documentation] Match each entry in the ${olt_peer_id_list} against ONU device ids.
291 FOR ${peer_id} IN @{olt_peer_id_list}
292 Match OLT Peer Id ${peer_id}
293 END
294
295Match OLT Peer Id
296 [Arguments] ${olt_peer_id}
297 [Documentation] Lookup the OLT Peer Id in against the list of ONU device Ids
298 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
299 Should Be Equal As Integers ${rc} 0
300 ${jsondata}= To Json ${output}
301 Log ${jsondata}
302 ${length}= Get Length ${jsondata}
303 FOR ${INDEX} IN RANGE 0 ${length}
304 ${value}= Get From List ${jsondata} ${INDEX}
305 ${devid}= Get From Dictionary ${value} id
306 Run Keyword If '${devid}' == '${olt_peer_id}' Exit For Loop
307 Run Keyword If '${INDEX}' == '${length}' Fail Peer id ${olt_peer_id} does not match any ONU device id;
308 END
309
310Validate ONU Peer Id
311 [Arguments] ${olt_device_id} ${List_ONU_Serial}
312 [Documentation] Match each ONU peer to that of the OLT device id
313 FOR ${onu_serial} IN @{List_ONU_Serial}
314 ${onu_dev_id}= Get Device ID From SN ${onu_serial}
315 Match ONU Peer Id ${onu_dev_id}
316 END
317
318Match ONU Peer Id
319 [Arguments] ${onu_dev_id}
320 [Documentation] Match an ONU peer to that of the OLT device id
321 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device ports ${onu_dev_id} -o json
322 Should Be Equal As Integers ${rc} 0
323 ${jsondata}= To Json ${output}
324 Log ${jsondata}
325 ${length}= Get Length ${jsondata}
326 FOR ${INDEX} IN RANGE 0 ${length}
327 ${value}= Get From List ${jsondata} ${INDEX}
328 ${type}= Get From Dictionary ${value} type
329 ${peers}= Get From Dictionary ${value} peers
330 Run Keyword If '${type}' == 'PON_ONU' Exit For Loop
331 END
332 ${length}= Get Length ${peers}
333 FOR ${INDEX} IN RANGE 0 ${length}
334 ${value}= Get From List ${peers} ${INDEX}
335 ${peer_id}= Get From Dictionary ${value} deviceid
336 END
337 Should Be Equal '${peer_id}' '${olt_device_id}'
338 ... Mismatch between ONU peer ${peer_id} and OLT device id ${olt_device_id} values=False
Kailash6f5acb62019-08-28 14:38:45 -0700339
Kailash6f5acb62019-08-28 14:38:45 -0700340Get Device ID From SN
341 [Arguments] ${serial_number}
342 [Documentation] Gets the device id by matching for ${serial_number}
Andy Bavier8fca0452019-12-16 15:30:11 -0700343 ${rc} ${id}= Run and Return Rc and Output
344 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=SerialNumber=${serial_number} --format='{{.Id}}'
345 Should Be Equal As Integers ${rc} 0
346 Log ${id}
Kailash6f5acb62019-08-28 14:38:45 -0700347 [Return] ${id}
348
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700349Get Logical Device ID From SN
350 [Arguments] ${serial_number}
351 [Documentation] Gets the device id by matching for ${serial_number}
Andy Bavier8fca0452019-12-16 15:30:11 -0700352 ${rc} ${id}= Run and Return Rc and Output
353 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice list --filter=SerialNumber=${serial_number} --format='{{.Id}}'
354 Should Be Equal As Integers ${rc} 0
355 Log ${id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700356 [Return] ${id}
357
Gilles Depatieb5682f82019-10-31 10:39:45 -0400358Build ONU SN List
359 [Arguments] ${serial_numbers}
360 [Documentation] Appends all ONU SNs to the ${serial_numbers} list
361 FOR ${INDEX} IN RANGE 0 ${num_onus}
362 Append To List ${serial_numbers} ${hosts.src[${INDEX}].onu}
363 END
364
365Get SN From Device ID
366 [Arguments] ${device_id}
367 [Documentation] Gets the device id by matching for ${device_id}
Andy Bavier8fca0452019-12-16 15:30:11 -0700368 ${rc} ${sn}= Run and Return Rc and Output
369 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=Id=${device_id} --format='{{.SerialNumber}}'
Gilles Depatieb5682f82019-10-31 10:39:45 -0400370 Should Be Equal As Integers ${rc} 0
Andy Bavier8fca0452019-12-16 15:30:11 -0700371 Log ${sn}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400372 [Return] ${sn}
373
Kailash6f5acb62019-08-28 14:38:45 -0700374Validate Device Removed
375 [Arguments] ${id}
376 [Documentation] Verifys that device, ${serial_number}, has been removed
Andy Bavier8fca0452019-12-16 15:30:11 -0700377 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
378 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700379 ${jsondata}= To Json ${output}
380 Log ${jsondata}
381 ${length}= Get Length ${jsondata}
382 @{ids}= Create List
Zack Williamsec53a1b2019-09-16 15:50:52 -0700383 FOR ${INDEX} IN RANGE 0 ${length}
384 ${value}= Get From List ${jsondata} ${INDEX}
385 ${device_id}= Get From Dictionary ${value} id
386 Append To List ${ids} ${device_id}
387 END
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700388 List Should Not Contain Value ${ids} ${id}