blob: d315ff6995a6db7afe88a700bafddffe01f16ed0 [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.
Kailash6f5acb62019-08-28 14:38:45 -070014# voltctl common functions
15
16*** Settings ***
17Documentation Library for various utilities
18Library SSHLibrary
Kailash6f5acb62019-08-28 14:38:45 -070019Library String
20Library DateTime
21Library Process
22Library Collections
23Library RequestsLibrary
24Library OperatingSystem
Matteo Scandolo142e6272020-04-29 17:36:59 -070025Resource ./utils.robot
Kailash6f5acb62019-08-28 14:38:45 -070026
27*** Keywords ***
Gilles Depatieb5682f82019-10-31 10:39:45 -040028Test Empty Device List
Zack Williamsa8fe75a2020-01-10 14:25:27 -070029 [Documentation] Verify that there are no devices in the system
30 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -040031 Should Be Equal As Integers ${rc} 0
32 ${jsondata}= To Json ${output}
33 Log ${jsondata}
34 ${length}= Get Length ${jsondata}
David Bainbridgef81cd642019-11-20 00:14:47 +000035 Should Be Equal As Integers ${length} 0
Gilles Depatieb5682f82019-10-31 10:39:45 -040036
Kailash6f5acb62019-08-28 14:38:45 -070037Create Device
Matteo Scandolo142e6272020-04-29 17:36:59 -070038 [Arguments] ${ip} ${port} ${type}=openolt
You Wang2b550642019-10-07 14:39:48 -070039 [Documentation] Creates a device in VOLTHA
Kailash6f5acb62019-08-28 14:38:45 -070040 #create/preprovision device
Gilles Depatie675a2062019-10-22 12:44:42 -040041 ${rc} ${device_id}= Run and Return Rc and Output
Matteo Scandolo142e6272020-04-29 17:36:59 -070042 ... ${VOLTCTL_CONFIG}; voltctl device create -t ${type} -H ${ip}:${port}
Kailash6f5acb62019-08-28 14:38:45 -070043 Should Be Equal As Integers ${rc} 0
44 [Return] ${device_id}
45
46Enable Device
47 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -070048 [Documentation] Enables a device in VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -070049 ${rc} ${output}= Run and Return Rc and Output
50 ... ${VOLTCTL_CONFIG}; voltctl device enable ${device_id}
Kailash6f5acb62019-08-28 14:38:45 -070051 Should Be Equal As Integers ${rc} 0
52
Suchitra Vemuri6db89412019-11-14 14:52:54 -080053Disable Device
54 [Arguments] ${device_id}
Hardik Windlassaaea3402020-03-10 19:45:45 +053055 [Documentation] Disables a device in VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -070056 ${rc} ${output}= Run and Return Rc and Output
57 ... ${VOLTCTL_CONFIG}; voltctl device disable ${device_id}
Suchitra Vemuri6db89412019-11-14 14:52:54 -080058 Should Be Equal As Integers ${rc} 0
59
Hardik Windlassaaea3402020-03-10 19:45:45 +053060Delete Device
61 [Arguments] ${device_id}
62 [Documentation] Deletes a device in VOLTHA
63 ${rc} ${output}= Run and Return Rc and Output
64 ... ${VOLTCTL_CONFIG}; voltctl device delete ${device_id}
65 Should Be Equal As Integers ${rc} 0
66
Hemadf003682020-04-28 21:22:22 +053067Reboot Device
68 [Arguments] ${device_id}
69 [Documentation] Reboot the OLT using voltctl command
70 ${rc} ${output}= Run and Return Rc and Output
71 ... ${VOLTCTL_CONFIG}; voltctl device reboot ${device_id}
72 Should Be Equal As Integers ${rc} 0
73
David Bainbridgef81cd642019-11-20 00:14:47 +000074Disable Devices In Voltha
75 [Documentation] Disables all the known devices in voltha
76 [Arguments] ${filter}
77 ${arg}= Set Variable ${EMPTY}
78 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070079 ${rc} ${devices}= Run and Return Rc and Output
80 ... ${VOLTCTL_CONFIG}; voltctl device list ${arg} --orderby Root -q | xargs echo -n
David Bainbridgef81cd642019-11-20 00:14:47 +000081 Should Be Equal As Integers ${rc} 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -070082 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output
83 ... ${VOLTCTL_CONFIG}; voltctl device disable ${devices}
David Bainbridgef81cd642019-11-20 00:14:47 +000084 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
85
86Test Devices Disabled In Voltha
87 [Documentation] Tests to verify that all devices in VOLTHA are disabled
88 [Arguments] ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070089 ${rc} ${count}= Run and Return Rc and Output
90 ... ${VOLTCTL_CONFIG}; voltctl device list --filter '${filter},AdminState!=DISABLED' -q | wc -l
David Bainbridgef81cd642019-11-20 00:14:47 +000091 Should Be Equal As Integers ${rc} 0
92 Should Be Equal As Integers ${count} 0
93
94Delete Devices In Voltha
95 [Documentation] Disables all the known devices in voltha
96 [Arguments] ${filter}
97 ${arg}= Set Variable ${EMPTY}
98 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070099 ${rc} ${devices}= Run and Return Rc and Output
100 ... ${VOLTCTL_CONFIG}; voltctl device list ${arg} --orderby Root -q | xargs echo -n
David Bainbridgef81cd642019-11-20 00:14:47 +0000101 Should Be Equal As Integers ${rc} 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700102 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output
103 ... ${VOLTCTL_CONFIG}; voltctl device delete ${devices}
David Bainbridgef81cd642019-11-20 00:14:47 +0000104 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
105
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700106Get Device Flows from Voltha
107 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700108 [Documentation] Gets device flows from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700109 ${rc} ${output}= Run and Return Rc and Output
110 ... ${VOLTCTL_CONFIG}; voltctl device flows ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700111 Should Be Equal As Integers ${rc} 0
112 [Return] ${output}
113
114Get Logical Device Output from Voltha
115 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700116 [Documentation] Gets logicaldevice flows and ports from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700117 ${rc1} ${flows}= Run and Return Rc and Output
118 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${device_id}
119 ${rc2} ${ports}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800120 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice port list ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700121 Log ${flows}
122 Log ${ports}
123 Should Be Equal As Integers ${rc1} 0
124 Should Be Equal As Integers ${rc2} 0
125
126Get Device Output from Voltha
127 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700128 [Documentation] Gets device flows and ports from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700129 ${rc1} ${flows}= Run and Return Rc and Output
130 ... ${VOLTCTL_CONFIG}; voltctl device flows ${device_id}
131 ${rc2} ${ports}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800132 ... ${VOLTCTL_CONFIG}; voltctl device port list ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700133 Log ${flows}
134 Log ${ports}
135 Should Be Equal As Integers ${rc1} 0
136 Should Be Equal As Integers ${rc2} 0
137
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800138Get Device List from Voltha
139 [Documentation] Gets Device List Output from Voltha
140 ${rc1} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list
141 Log ${devices}
142 Should Be Equal As Integers ${rc1} 0
143
Matteo Scandolo142e6272020-04-29 17:36:59 -0700144Get Logical Device List from Voltha
145 [Documentation] Gets Logical Device List Output from Voltha (in json format)
146 ${rc1} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice list -o json
147 Log ${devices}
148 Should Be Equal As Integers ${rc1} 0
149 Return From Keyword ${devices}
150
Kailash6f5acb62019-08-28 14:38:45 -0700151Validate Device
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700152 [Documentation]
ubuntu6b6e7d42020-03-02 12:35:42 -0800153 ... Parses the output of "voltctl device list" and inspects a device ${id}, specified as either
154 ... the serial number or device ID. Arguments are matched for device states of: "admin_state",
155 ... "oper_status", and "connect_status"
156 [Arguments] ${admin_state} ${oper_status} ${connect_status}
157 ... ${id}=${EMPTY} ${onu_reason}=${EMPTY} ${onu}=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400158 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
159 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700160 ${jsondata}= To Json ${output}
Kailash6f5acb62019-08-28 14:38:45 -0700161 ${length}= Get Length ${jsondata}
ubuntu6b6e7d42020-03-02 12:35:42 -0800162 ${matched}= Set Variable False
Zack Williamsec53a1b2019-09-16 15:50:52 -0700163 FOR ${INDEX} IN RANGE 0 ${length}
164 ${value}= Get From List ${jsondata} ${INDEX}
165 ${astate}= Get From Dictionary ${value} adminstate
166 ${opstatus}= Get From Dictionary ${value} operstatus
167 ${cstatus}= Get From Dictionary ${value} connectstatus
168 ${sn}= Get From Dictionary ${value} serialnumber
Gilles Depatieb5682f82019-10-31 10:39:45 -0400169 ${devId}= Get From Dictionary ${value} id
Zack Williamsec53a1b2019-09-16 15:50:52 -0700170 ${mib_state}= Get From Dictionary ${value} reason
ubuntu6b6e7d42020-03-02 12:35:42 -0800171 ${matched}= Set Variable If '${sn}' == '${id}' or '${devId}' == '${id}' True False
Andy Bavierb63f6d22020-03-12 15:34:37 -0700172 Exit For Loop If ${matched}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700173 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700174 Should Be True ${matched} No match found for ${id} to validate device
Matteo Scandolo5e10b282019-11-25 10:54:32 -0700175 Log ${value}
ubuntu6b6e7d42020-03-02 12:35:42 -0800176 Should Be Equal '${astate}' '${admin_state}' Device ${sn} admin_state != ${admin_state}
Gilles Depatie675a2062019-10-22 12:44:42 -0400177 ... values=False
ubuntu6b6e7d42020-03-02 12:35:42 -0800178 Should Be Equal '${opstatus}' '${oper_status}' Device ${sn} oper_status != ${oper_status}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400179 ... values=False
ubuntu6b6e7d42020-03-02 12:35:42 -0800180 Should Be Equal '${cstatus}' '${connect_status}' Device ${sn} conn_status != ${connect_status}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400181 ... values=False
182 Run Keyword If '${onu}' == 'True' Should Be Equal '${mib_state}' '${onu_reason}'
ubuntu6b6e7d42020-03-02 12:35:42 -0800183 ... Device ${sn} mib_state incorrect (${mib_state}) values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400184
185Validate OLT Device
ubuntu6b6e7d42020-03-02 12:35:42 -0800186 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${id}=${EMPTY}
187 [Documentation] Parses the output of "voltctl device list" and inspects device ${id}, specified
188 ... as either its serial numbner or device ID. Match on OLT Serial number or Device Id and inspect states
189 Validate Device ${admin_state} ${oper_status} ${connect_status} ${id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400190
191Validate ONU Devices
192 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${List_ONU_Serial}
Andy Bavierf1f26ed2020-03-18 10:59:07 -0700193 ... ${onu_reason}=omci-flows-pushed
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700194 [Documentation] Parses the output of "voltctl device list" and inspects device ${List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400195 ... Iteratively match on each Serial number contained in ${List_ONU_Serial} and inspect
196 ... states including MIB state
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700197 FOR ${serial_number} IN @{List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400198 Validate Device ${admin_state} ${oper_status} ${connect_status} ${serial_number}
Andy Bavierf1f26ed2020-03-18 10:59:07 -0700199 ... onu_reason=${onu_reason} onu=True
Debasish28130d02020-03-16 11:05:26 +0000200 END
201
Gilles Depatieb5682f82019-10-31 10:39:45 -0400202Validate Device Port Types
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700203 [Documentation]
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800204 ... Parses the output of voltctl device port list <device_id> and matches the port types listed
Andy Bavier90eb1a12020-03-26 11:54:35 -0700205 [Arguments] ${device_id} ${pon_type} ${ethernet_type} ${all_active}=True
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700206 ${rc} ${output}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800207 ... ${VOLTCTL_CONFIG}; voltctl device port list ${device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400208 Should Be Equal As Integers ${rc} 0
209 ${jsondata}= To Json ${output}
210 Log ${jsondata}
211 ${length}= Get Length ${jsondata}
212 FOR ${INDEX} IN RANGE 0 ${length}
213 ${value}= Get From List ${jsondata} ${INDEX}
214 ${astate}= Get From Dictionary ${value} adminstate
215 ${opstatus}= Get From Dictionary ${value} operstatus
216 ${type}= Get From Dictionary ${value} type
Hemaf64d34c2020-03-25 00:40:17 +0530217 Should Be Equal '${astate}' 'ENABLED' Device ${device_id} port admin_state != ENABLED values=False
Andy Bavier90eb1a12020-03-26 11:54:35 -0700218 Run Keyword If ${all_active} Should Be Equal '${opstatus}' 'ACTIVE'
219 ... Device ${device_id} port oper_status != ACTIVE values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400220 Should Be True '${type}' == '${pon_type}' or '${type}' == '${ethernet_type}'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700221 ... Device ${device_id} port type is neither ${pon_type} or ${ethernet_type}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400222 END
223
224Validate OLT Port Types
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800225 [Documentation] Parses the output of voltctl device port list ${olt_device_id} and matches the port types listed
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700226 [Arguments] ${pon_type} ${ethernet_type}
227 Validate Device Port Types ${olt_device_id} ${pon_type} ${ethernet_type}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400228
229Validate ONU Port Types
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700230 [Arguments] ${List_ONU_Serial} ${pon_type} ${ethernet_type}
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800231 [Documentation] Parses the output of voltctl device port list for each ONU SN listed in ${List_ONU_Serial}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700232 ... and matches the port types listed
Gilles Depatieb5682f82019-10-31 10:39:45 -0400233 FOR ${serial_number} IN @{List_ONU_Serial}
234 ${onu_dev_id}= Get Device ID From SN ${serial_number}
Andy Bavier90eb1a12020-03-26 11:54:35 -0700235 # Only first UNI port is ACTIVE; the rest are in DISCOVERED operstatus
236 Validate Device Port Types ${onu_dev_id} ${pon_type} ${ethernet_type} all_active=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400237 END
238
239Validate Device Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000240 [Arguments] ${device_id} ${flow_count}=${EMPTY}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400241 [Documentation] Parses the output of voltctl device flows <device_id> and expects flow count > 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700242 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device flows ${device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400243 Should Be Equal As Integers ${rc} 0
244 ${jsondata}= To Json ${output}
245 Log ${jsondata}
246 ${length}= Get Length ${jsondata}
247 Log 'Number of flows = ' ${length}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000248 Run Keyword If '${flow_count}' == '${EMPTY}' Should Be True ${length} > 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400249 ... Number of flows for ${device_id} was 0
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000250 ... ELSE Should Be True ${length} == ${flow_count}
251 ... Number of flows for ${device_id} was not ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400252
253Validate OLT Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000254 [Arguments] ${flow_count}=${EMPTY}
255 [Documentation] Parses the output of voltctl device flows ${olt_device_id}
256 ... and expects flow count == ${flow_count}
257 Validate Device Flows ${olt_device_id} ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400258
259Validate ONU Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000260 [Arguments] ${List_ONU_Serial} ${flow_count}=${EMPTY}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400261 [Documentation] Parses the output of voltctl device flows for each ONU SN listed in ${List_ONU_Serial}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000262 ... and expects flow count == ${flow_count}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700263 FOR ${serial_number} IN @{List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400264 ${onu_dev_id}= Get Device ID From SN ${serial_number}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000265 Validate Device Flows ${onu_dev_id} ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400266 END
267
268Validate Logical Device
269 [Documentation] Validate Logical Device is listed
270 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice list -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 ${devid}= Get From Dictionary ${value} id
278 ${rootdev}= Get From Dictionary ${value} rootdeviceid
279 ${sn}= Get From Dictionary ${value} serialnumber
280 Exit For Loop
281 END
282 Should Be Equal '${rootdev}' '${olt_device_id}' Root Device does not match ${olt_device_id} values=False
283 Should Be Equal '${sn}' '${BBSIM_OLT_SN}' Logical Device ${sn} does not match ${BBSIM_OLT_SN}
284 ... values=False
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700285 [Return] ${devid}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400286
287Validate Logical Device Ports
288 [Arguments] ${logical_device_id}
289 [Documentation] Validate Logical Device Ports are listed and are > 0
290 ${rc} ${output}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800291 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice port list ${logical_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400292 Should Be Equal As Integers ${rc} 0
293 ${jsondata}= To Json ${output}
294 Log ${jsondata}
295 ${length}= Get Length ${jsondata}
296 Should Be True ${length} > 0 Number of ports for ${logical_device_id} was 0
297
298Validate Logical Device Flows
299 [Arguments] ${logical_device_id}
300 [Documentation] Validate Logical Device Flows are listed and are > 0
301 ${rc} ${output}= Run and Return Rc and Output
302 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${logical_device_id} -o json
303 Should Be Equal As Integers ${rc} 0
304 ${jsondata}= To Json ${output}
305 Log ${jsondata}
306 ${length}= Get Length ${jsondata}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700307 Should Be True ${length} > 0 Number of flows for ${logical_device_id} was 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400308
309Retrieve Peer List From OLT
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700310 [Arguments] ${olt_peer_list}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400311 [Documentation] Retrieve the list of peer device id list from port list
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700312 ${rc} ${output}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800313 ... ${VOLTCTL_CONFIG}; voltctl device port list ${olt_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400314 Should Be Equal As Integers ${rc} 0
315 ${jsondata}= To Json ${output}
316 Log ${jsondata}
317 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700318 ${matched}= Set Variable False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400319 FOR ${INDEX} IN RANGE 0 ${length}
320 ${value}= Get From List ${jsondata} ${INDEX}
321 ${type}= Get From Dictionary ${value} type
322 ${peers}= Get From Dictionary ${value} peers
Andy Bavierb63f6d22020-03-12 15:34:37 -0700323 ${matched}= Set Variable If '${type}' == 'PON_OLT' True False
324 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400325 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700326 Should Be True ${matched} No PON port found for OLT ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400327 ${length}= Get Length ${peers}
328 FOR ${INDEX} IN RANGE 0 ${length}
329 ${value}= Get From List ${peers} ${INDEX}
330 ${peer_id}= Get From Dictionary ${value} deviceid
331 Append To List ${olt_peer_list} ${peer_id}
332 END
333
334Validate OLT Peer Id List
335 [Arguments] ${olt_peer_id_list}
336 [Documentation] Match each entry in the ${olt_peer_id_list} against ONU device ids.
337 FOR ${peer_id} IN @{olt_peer_id_list}
338 Match OLT Peer Id ${peer_id}
339 END
340
341Match OLT Peer Id
342 [Arguments] ${olt_peer_id}
343 [Documentation] Lookup the OLT Peer Id in against the list of ONU device Ids
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700344 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400345 Should Be Equal As Integers ${rc} 0
346 ${jsondata}= To Json ${output}
347 Log ${jsondata}
348 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700349 ${matched}= Set Variable False
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700350 FOR ${INDEX} IN RANGE 0 ${length}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400351 ${value}= Get From List ${jsondata} ${INDEX}
352 ${devid}= Get From Dictionary ${value} id
Andy Bavierb63f6d22020-03-12 15:34:37 -0700353 ${matched}= Set Variable If '${devid}' == '${olt_peer_id}' True False
354 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400355 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700356 Should Be True ${matched} Peer id ${olt_peer_id} does not match any ONU device id
Gilles Depatieb5682f82019-10-31 10:39:45 -0400357
358Validate ONU Peer Id
359 [Arguments] ${olt_device_id} ${List_ONU_Serial}
360 [Documentation] Match each ONU peer to that of the OLT device id
361 FOR ${onu_serial} IN @{List_ONU_Serial}
362 ${onu_dev_id}= Get Device ID From SN ${onu_serial}
363 Match ONU Peer Id ${onu_dev_id}
364 END
365
366Match ONU Peer Id
367 [Arguments] ${onu_dev_id}
368 [Documentation] Match an ONU peer to that of the OLT device id
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800369 ${rc} ${output}= Run and Return Rc and Output
370 ... ${VOLTCTL_CONFIG}; voltctl device port list ${onu_dev_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400371 Should Be Equal As Integers ${rc} 0
372 ${jsondata}= To Json ${output}
373 Log ${jsondata}
374 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700375 ${matched}= Set Variable False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400376 FOR ${INDEX} IN RANGE 0 ${length}
377 ${value}= Get From List ${jsondata} ${INDEX}
378 ${type}= Get From Dictionary ${value} type
379 ${peers}= Get From Dictionary ${value} peers
Andy Bavierb63f6d22020-03-12 15:34:37 -0700380 ${matched}= Set Variable If '${type}' == 'PON_ONU' True False
381 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400382 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700383 Should Be True ${matched} No PON port found for ONU ${onu_dev_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400384 ${length}= Get Length ${peers}
385 FOR ${INDEX} IN RANGE 0 ${length}
386 ${value}= Get From List ${peers} ${INDEX}
387 ${peer_id}= Get From Dictionary ${value} deviceid
388 END
389 Should Be Equal '${peer_id}' '${olt_device_id}'
390 ... Mismatch between ONU peer ${peer_id} and OLT device id ${olt_device_id} values=False
Kailash6f5acb62019-08-28 14:38:45 -0700391
Kailash6f5acb62019-08-28 14:38:45 -0700392Get Device ID From SN
393 [Arguments] ${serial_number}
394 [Documentation] Gets the device id by matching for ${serial_number}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700395 ${rc} ${id}= Run and Return Rc and Output
Andy Bavier8fca0452019-12-16 15:30:11 -0700396 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=SerialNumber=${serial_number} --format='{{.Id}}'
397 Should Be Equal As Integers ${rc} 0
398 Log ${id}
Kailash6f5acb62019-08-28 14:38:45 -0700399 [Return] ${id}
400
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700401Get Logical Device ID From SN
402 [Arguments] ${serial_number}
403 [Documentation] Gets the device id by matching for ${serial_number}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700404 ${rc} ${id}= Run and Return Rc and Output
Andy Bavier8fca0452019-12-16 15:30:11 -0700405 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice list --filter=SerialNumber=${serial_number} --format='{{.Id}}'
406 Should Be Equal As Integers ${rc} 0
407 Log ${id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700408 [Return] ${id}
409
Gilles Depatieb5682f82019-10-31 10:39:45 -0400410Build ONU SN List
411 [Arguments] ${serial_numbers}
412 [Documentation] Appends all ONU SNs to the ${serial_numbers} list
413 FOR ${INDEX} IN RANGE 0 ${num_onus}
414 Append To List ${serial_numbers} ${hosts.src[${INDEX}].onu}
415 END
416
417Get SN From Device ID
418 [Arguments] ${device_id}
419 [Documentation] Gets the device id by matching for ${device_id}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700420 ${rc} ${sn}= Run and Return Rc and Output
Andy Bavier8fca0452019-12-16 15:30:11 -0700421 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=Id=${device_id} --format='{{.SerialNumber}}'
Gilles Depatieb5682f82019-10-31 10:39:45 -0400422 Should Be Equal As Integers ${rc} 0
Andy Bavier8fca0452019-12-16 15:30:11 -0700423 Log ${sn}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400424 [Return] ${sn}
425
Scott Baker60e570d2020-02-02 22:10:13 -0800426Get Parent ID From Device ID
427 [Arguments] ${device_id}
428 [Documentation] Gets the device id by matching for ${device_id}
429 ${rc} ${pid}= Run and Return Rc and Output
430 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=Id=${device_id} --format='{{.ParentId}}'
431 Should Be Equal As Integers ${rc} 0
432 Log ${pid}
433 [Return] ${pid}
434
Kailash6f5acb62019-08-28 14:38:45 -0700435Validate Device Removed
436 [Arguments] ${id}
437 [Documentation] Verifys that device, ${serial_number}, has been removed
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700438 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
Andy Bavier8fca0452019-12-16 15:30:11 -0700439 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700440 ${jsondata}= To Json ${output}
441 Log ${jsondata}
442 ${length}= Get Length ${jsondata}
443 @{ids}= Create List
Zack Williamsec53a1b2019-09-16 15:50:52 -0700444 FOR ${INDEX} IN RANGE 0 ${length}
445 ${value}= Get From List ${jsondata} ${INDEX}
446 ${device_id}= Get From Dictionary ${value} id
447 Append To List ${ids} ${device_id}
448 END
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700449 List Should Not Contain Value ${ids} ${id}
Suchitra Vemuricd2f64f2020-02-18 18:30:27 -0800450
451Reboot ONU
452 [Arguments] ${onu_id} ${src} ${dst}
453 [Documentation] Using voltctl command reboot ONU and verify that ONU comes up to running state
454 ${rc} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device reboot ${onu_id}
455 Should Be Equal As Integers ${rc} 0
456 Run Keyword and Ignore Error Wait Until Keyword Succeeds 60s 1s Validate Device
457 ... ENABLED DISCOVERED UNREACHABLE ${onu_id} onu=True
Matteo Scandolo142e6272020-04-29 17:36:59 -0700458
459Assert ONUs in Voltha
460 [Arguments] ${count}
461 [Documentation] Check that a certain number of devices reached the ACTIVE/ENABLE state
462 ${rc1} ${devices}= Run and Return Rc and Output
463 ... ${VOLTCTL_CONFIG}; voltctl device list | grep -v OLT | grep ACTIVE | wc -l
464 Should Be Equal As Integers ${rc1} 0
465 Should Be Equal As Integers ${devices} ${count}
466
467Wait for ONUs in VOLTHA
468 [Arguments] ${count}
469 [Documentation] Waits until a certain number of devices reached the ACTIVE/ENABLE state
470 Wait Until Keyword Succeeds 10m 5s Assert ONUs In Voltha ${count}
471
472Count Logical Devices flows
473 [Documentation] Count the flows across logical devices in VOLTHA
474 [Arguments] ${targetFlows}
475 ${output}= Get Logical Device List From Voltha
476 ${logical_devices}= To Json ${output}
477 ${total_flows}= Set Variable 0
478 FOR ${device} IN @{logical_devices}
479 ${rc} ${flows}= Run and Return Rc and Output
480 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${device['id']} | grep -v ID | wc -l
481 Should Be Equal As Integers ${rc} 0
482 ${total_flows}= Evaluate ${total_flows} + ${flows}
483 END
484 Should Be Equal As Integers ${targetFlows} ${total_flows}
485
486Wait for Logical Devices flows
487 [Documentation] Waits until the flows have been provisioned in the logical device
488 [Arguments] ${workflow} ${uni_count} ${olt_count} ${provisioned}
489 ${targetFlows}= Calculate flows by workflow ${workflow} ${uni_count} ${olt_count} ${provisioned}
490 Log ${targetFlows}
491 # TODO extend Validate Logical Device Flows to check the correct number of flows
492 Wait Until Keyword Succeeds 10m 5s Count Logical Devices flows ${targetFlows}
493