blob: 0eae7efcfbfcd4265a75711ad15c74f20a68f59f [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
Matteo Scandoloeb26a842020-05-08 10:06:24 -070026Resource ./flows.robot
Kailash6f5acb62019-08-28 14:38:45 -070027
28*** Keywords ***
Gilles Depatieb5682f82019-10-31 10:39:45 -040029Test Empty Device List
Zack Williamsa8fe75a2020-01-10 14:25:27 -070030 [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
Gilles Depatieb5682f82019-10-31 10:39:45 -040032 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
Matteo Scandolo142e6272020-04-29 17:36:59 -070039 [Arguments] ${ip} ${port} ${type}=openolt
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
Matteo Scandolo142e6272020-04-29 17:36:59 -070043 ... ${VOLTCTL_CONFIG}; voltctl device create -t ${type} -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
Zack Williamsa8fe75a2020-01-10 14:25:27 -070050 ${rc} ${output}= Run and Return Rc and Output
51 ... ${VOLTCTL_CONFIG}; voltctl device enable ${device_id}
Kailash6f5acb62019-08-28 14:38:45 -070052 Should Be Equal As Integers ${rc} 0
53
Suchitra Vemuri6db89412019-11-14 14:52:54 -080054Disable Device
55 [Arguments] ${device_id}
Hardik Windlassaaea3402020-03-10 19:45:45 +053056 [Documentation] Disables a device in VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -070057 ${rc} ${output}= Run and Return Rc and Output
58 ... ${VOLTCTL_CONFIG}; voltctl device disable ${device_id}
Suchitra Vemuri6db89412019-11-14 14:52:54 -080059 Should Be Equal As Integers ${rc} 0
60
Hardik Windlassaaea3402020-03-10 19:45:45 +053061Delete Device
62 [Arguments] ${device_id}
63 [Documentation] Deletes a device in VOLTHA
64 ${rc} ${output}= Run and Return Rc and Output
65 ... ${VOLTCTL_CONFIG}; voltctl device delete ${device_id}
66 Should Be Equal As Integers ${rc} 0
67
Hemadf003682020-04-28 21:22:22 +053068Reboot Device
69 [Arguments] ${device_id}
70 [Documentation] Reboot the OLT using voltctl command
71 ${rc} ${output}= Run and Return Rc and Output
72 ... ${VOLTCTL_CONFIG}; voltctl device reboot ${device_id}
73 Should Be Equal As Integers ${rc} 0
74
David Bainbridgef81cd642019-11-20 00:14:47 +000075Disable Devices In Voltha
76 [Documentation] Disables all the known devices in voltha
77 [Arguments] ${filter}
78 ${arg}= Set Variable ${EMPTY}
79 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070080 ${rc} ${devices}= Run and Return Rc and Output
81 ... ${VOLTCTL_CONFIG}; voltctl device list ${arg} --orderby Root -q | xargs echo -n
David Bainbridgef81cd642019-11-20 00:14:47 +000082 Should Be Equal As Integers ${rc} 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -070083 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output
84 ... ${VOLTCTL_CONFIG}; voltctl device disable ${devices}
David Bainbridgef81cd642019-11-20 00:14:47 +000085 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
86
87Test Devices Disabled In Voltha
88 [Documentation] Tests to verify that all devices in VOLTHA are disabled
89 [Arguments] ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070090 ${rc} ${count}= Run and Return Rc and Output
91 ... ${VOLTCTL_CONFIG}; voltctl device list --filter '${filter},AdminState!=DISABLED' -q | wc -l
David Bainbridgef81cd642019-11-20 00:14:47 +000092 Should Be Equal As Integers ${rc} 0
93 Should Be Equal As Integers ${count} 0
94
95Delete Devices In Voltha
96 [Documentation] Disables all the known devices in voltha
97 [Arguments] ${filter}
98 ${arg}= Set Variable ${EMPTY}
99 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700100 ${rc} ${devices}= Run and Return Rc and Output
101 ... ${VOLTCTL_CONFIG}; voltctl device list ${arg} --orderby Root -q | xargs echo -n
David Bainbridgef81cd642019-11-20 00:14:47 +0000102 Should Be Equal As Integers ${rc} 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700103 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output
104 ... ${VOLTCTL_CONFIG}; voltctl device delete ${devices}
David Bainbridgef81cd642019-11-20 00:14:47 +0000105 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
106
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700107Get Device Flows from Voltha
108 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700109 [Documentation] Gets device flows from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700110 ${rc} ${output}= Run and Return Rc and Output
111 ... ${VOLTCTL_CONFIG}; voltctl device flows ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700112 Should Be Equal As Integers ${rc} 0
113 [Return] ${output}
114
115Get Logical Device Output from Voltha
116 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700117 [Documentation] Gets logicaldevice flows and ports from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700118 ${rc1} ${flows}= Run and Return Rc and Output
119 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${device_id}
120 ${rc2} ${ports}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800121 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice port list ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700122 Log ${flows}
123 Log ${ports}
124 Should Be Equal As Integers ${rc1} 0
125 Should Be Equal As Integers ${rc2} 0
126
127Get Device Output from Voltha
128 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700129 [Documentation] Gets device flows and ports from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700130 ${rc1} ${flows}= Run and Return Rc and Output
131 ... ${VOLTCTL_CONFIG}; voltctl device flows ${device_id}
132 ${rc2} ${ports}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800133 ... ${VOLTCTL_CONFIG}; voltctl device port list ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700134 Log ${flows}
135 Log ${ports}
136 Should Be Equal As Integers ${rc1} 0
137 Should Be Equal As Integers ${rc2} 0
138
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800139Get Device List from Voltha
140 [Documentation] Gets Device List Output from Voltha
141 ${rc1} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list
142 Log ${devices}
143 Should Be Equal As Integers ${rc1} 0
144
Matteo Scandolo616daab2020-05-13 11:49:24 -0700145Get Device List from Voltha by type
146 [Documentation] Gets Device List Output from Voltha applying filtering by device type
147 [Arguments] ${type}
148 ${rc1} ${devices}= Run and Return Rc and Output
149 ... ${VOLTCTL_CONFIG}; voltctl device list -f Type=${type} -o json
150 Log ${devices}
151 Should Be Equal As Integers ${rc1} 0
152 Return From Keyword ${devices}
153
Matteo Scandolo142e6272020-04-29 17:36:59 -0700154Get Logical Device List from Voltha
155 [Documentation] Gets Logical Device List Output from Voltha (in json format)
156 ${rc1} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice list -o json
157 Log ${devices}
158 Should Be Equal As Integers ${rc1} 0
159 Return From Keyword ${devices}
160
Kailash6f5acb62019-08-28 14:38:45 -0700161Validate Device
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700162 [Documentation]
ubuntu6b6e7d42020-03-02 12:35:42 -0800163 ... Parses the output of "voltctl device list" and inspects a device ${id}, specified as either
164 ... the serial number or device ID. Arguments are matched for device states of: "admin_state",
165 ... "oper_status", and "connect_status"
166 [Arguments] ${admin_state} ${oper_status} ${connect_status}
167 ... ${id}=${EMPTY} ${onu_reason}=${EMPTY} ${onu}=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400168 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
169 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700170 ${jsondata}= To Json ${output}
Kailash6f5acb62019-08-28 14:38:45 -0700171 ${length}= Get Length ${jsondata}
ubuntu6b6e7d42020-03-02 12:35:42 -0800172 ${matched}= Set Variable False
Zack Williamsec53a1b2019-09-16 15:50:52 -0700173 FOR ${INDEX} IN RANGE 0 ${length}
174 ${value}= Get From List ${jsondata} ${INDEX}
Scott Baker780b65f2020-05-22 14:03:15 -0700175 ${jsonCamelCaseFieldnames}= Run Keyword And Return Status
176 ... Dictionary Should Contain Key ${value} adminState
177 ${astate}= Run Keyword If ${jsonCamelCaseFieldNames}
178 ... Get From Dictionary ${value} adminState
179 ... ELSE
180 ... Get From Dictionary ${value} adminstate
181 ${opstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
182 ... Get From Dictionary ${value} operStatus
183 ... ELSE
184 ... Get From Dictionary ${value} operstatus
185 ${cstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
186 ... Get From Dictionary ${value} connectStatus
187 ... ELSE
188 ... Get From Dictionary ${value} connectstatus
189 ${sn}= Run Keyword If ${jsonCamelCaseFieldNames}
190 ... Get From Dictionary ${value} serialNumber
191 ... ELSE
192 ... Get From Dictionary ${value} serialnumber
Gilles Depatieb5682f82019-10-31 10:39:45 -0400193 ${devId}= Get From Dictionary ${value} id
Zack Williamsec53a1b2019-09-16 15:50:52 -0700194 ${mib_state}= Get From Dictionary ${value} reason
ubuntu6b6e7d42020-03-02 12:35:42 -0800195 ${matched}= Set Variable If '${sn}' == '${id}' or '${devId}' == '${id}' True False
Andy Bavierb63f6d22020-03-12 15:34:37 -0700196 Exit For Loop If ${matched}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700197 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700198 Should Be True ${matched} No match found for ${id} to validate device
Matteo Scandolo5e10b282019-11-25 10:54:32 -0700199 Log ${value}
ubuntu6b6e7d42020-03-02 12:35:42 -0800200 Should Be Equal '${astate}' '${admin_state}' Device ${sn} admin_state != ${admin_state}
Gilles Depatie675a2062019-10-22 12:44:42 -0400201 ... values=False
ubuntu6b6e7d42020-03-02 12:35:42 -0800202 Should Be Equal '${opstatus}' '${oper_status}' Device ${sn} oper_status != ${oper_status}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400203 ... values=False
ubuntu6b6e7d42020-03-02 12:35:42 -0800204 Should Be Equal '${cstatus}' '${connect_status}' Device ${sn} conn_status != ${connect_status}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400205 ... values=False
206 Run Keyword If '${onu}' == 'True' Should Be Equal '${mib_state}' '${onu_reason}'
ubuntu6b6e7d42020-03-02 12:35:42 -0800207 ... Device ${sn} mib_state incorrect (${mib_state}) values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400208
209Validate OLT Device
ubuntu6b6e7d42020-03-02 12:35:42 -0800210 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${id}=${EMPTY}
211 [Documentation] Parses the output of "voltctl device list" and inspects device ${id}, specified
212 ... as either its serial numbner or device ID. Match on OLT Serial number or Device Id and inspect states
213 Validate Device ${admin_state} ${oper_status} ${connect_status} ${id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400214
215Validate ONU Devices
216 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${List_ONU_Serial}
Andy Bavierf1f26ed2020-03-18 10:59:07 -0700217 ... ${onu_reason}=omci-flows-pushed
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700218 [Documentation] Parses the output of "voltctl device list" and inspects device ${List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400219 ... Iteratively match on each Serial number contained in ${List_ONU_Serial} and inspect
220 ... states including MIB state
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700221 FOR ${serial_number} IN @{List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400222 Validate Device ${admin_state} ${oper_status} ${connect_status} ${serial_number}
Andy Bavierf1f26ed2020-03-18 10:59:07 -0700223 ... onu_reason=${onu_reason} onu=True
Debasish28130d02020-03-16 11:05:26 +0000224 END
225
Gilles Depatieb5682f82019-10-31 10:39:45 -0400226Validate Device Port Types
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700227 [Documentation]
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800228 ... Parses the output of voltctl device port list <device_id> and matches the port types listed
Andy Bavier90eb1a12020-03-26 11:54:35 -0700229 [Arguments] ${device_id} ${pon_type} ${ethernet_type} ${all_active}=True
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700230 ${rc} ${output}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800231 ... ${VOLTCTL_CONFIG}; voltctl device port list ${device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400232 Should Be Equal As Integers ${rc} 0
233 ${jsondata}= To Json ${output}
234 Log ${jsondata}
235 ${length}= Get Length ${jsondata}
236 FOR ${INDEX} IN RANGE 0 ${length}
237 ${value}= Get From List ${jsondata} ${INDEX}
Scott Baker780b65f2020-05-22 14:03:15 -0700238 ${jsonCamelCaseFieldnames}= Run Keyword And Return Status
239 ... Dictionary Should Contain Key ${value} adminState
240 ${astate}= Run Keyword If ${jsonCamelCaseFieldNames}
241 ... ${astate}= Get From Dictionary ${value} adminState
242 ... ELSE
243 ... ${astate}= Get From Dictionary ${value} adminstate
244 ${opstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
245 ... Get From Dictionary ${value} operStatus
246 ... ELSE
247 ... ${astate}= Get From Dictionary ${value} operstatus
Gilles Depatieb5682f82019-10-31 10:39:45 -0400248 ${type}= Get From Dictionary ${value} type
Hemaf64d34c2020-03-25 00:40:17 +0530249 Should Be Equal '${astate}' 'ENABLED' Device ${device_id} port admin_state != ENABLED values=False
Andy Bavier90eb1a12020-03-26 11:54:35 -0700250 Run Keyword If ${all_active} Should Be Equal '${opstatus}' 'ACTIVE'
251 ... Device ${device_id} port oper_status != ACTIVE values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400252 Should Be True '${type}' == '${pon_type}' or '${type}' == '${ethernet_type}'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700253 ... Device ${device_id} port type is neither ${pon_type} or ${ethernet_type}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400254 END
255
256Validate OLT Port Types
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800257 [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 -0700258 [Arguments] ${pon_type} ${ethernet_type}
259 Validate Device Port Types ${olt_device_id} ${pon_type} ${ethernet_type}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400260
261Validate ONU Port Types
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700262 [Arguments] ${List_ONU_Serial} ${pon_type} ${ethernet_type}
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800263 [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 -0700264 ... and matches the port types listed
Gilles Depatieb5682f82019-10-31 10:39:45 -0400265 FOR ${serial_number} IN @{List_ONU_Serial}
266 ${onu_dev_id}= Get Device ID From SN ${serial_number}
Andy Bavier90eb1a12020-03-26 11:54:35 -0700267 # Only first UNI port is ACTIVE; the rest are in DISCOVERED operstatus
268 Validate Device Port Types ${onu_dev_id} ${pon_type} ${ethernet_type} all_active=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400269 END
270
271Validate Device Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000272 [Arguments] ${device_id} ${flow_count}=${EMPTY}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400273 [Documentation] Parses the output of voltctl device flows <device_id> and expects flow count > 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700274 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device flows ${device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400275 Should Be Equal As Integers ${rc} 0
276 ${jsondata}= To Json ${output}
277 Log ${jsondata}
278 ${length}= Get Length ${jsondata}
279 Log 'Number of flows = ' ${length}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000280 Run Keyword If '${flow_count}' == '${EMPTY}' Should Be True ${length} > 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400281 ... Number of flows for ${device_id} was 0
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000282 ... ELSE Should Be True ${length} == ${flow_count}
283 ... Number of flows for ${device_id} was not ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400284
285Validate OLT Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000286 [Arguments] ${flow_count}=${EMPTY}
287 [Documentation] Parses the output of voltctl device flows ${olt_device_id}
288 ... and expects flow count == ${flow_count}
289 Validate Device Flows ${olt_device_id} ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400290
291Validate ONU Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000292 [Arguments] ${List_ONU_Serial} ${flow_count}=${EMPTY}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400293 [Documentation] Parses the output of voltctl device flows for each ONU SN listed in ${List_ONU_Serial}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000294 ... and expects flow count == ${flow_count}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700295 FOR ${serial_number} IN @{List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400296 ${onu_dev_id}= Get Device ID From SN ${serial_number}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000297 Validate Device Flows ${onu_dev_id} ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400298 END
299
300Validate Logical Device
301 [Documentation] Validate Logical Device is listed
302 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl logicaldevice list -o json
303 Should Be Equal As Integers ${rc} 0
304 ${jsondata}= To Json ${output}
305 Log ${jsondata}
306 ${length}= Get Length ${jsondata}
307 FOR ${INDEX} IN RANGE 0 ${length}
308 ${value}= Get From List ${jsondata} ${INDEX}
309 ${devid}= Get From Dictionary ${value} id
Scott Baker2ab2a0c2020-06-05 12:51:47 -0700310 ${rootdev}= Get From Dictionary ${value} rootDeviceId
311 ${desc}= Get From Dictionary ${value} desc
312 ${sn}= Get From Dictionary ${desc} serialNum
Gilles Depatieb5682f82019-10-31 10:39:45 -0400313 Exit For Loop
314 END
315 Should Be Equal '${rootdev}' '${olt_device_id}' Root Device does not match ${olt_device_id} values=False
316 Should Be Equal '${sn}' '${BBSIM_OLT_SN}' Logical Device ${sn} does not match ${BBSIM_OLT_SN}
317 ... values=False
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700318 [Return] ${devid}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400319
320Validate Logical Device Ports
321 [Arguments] ${logical_device_id}
322 [Documentation] Validate Logical Device Ports are listed and are > 0
323 ${rc} ${output}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800324 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice port list ${logical_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400325 Should Be Equal As Integers ${rc} 0
326 ${jsondata}= To Json ${output}
327 Log ${jsondata}
328 ${length}= Get Length ${jsondata}
329 Should Be True ${length} > 0 Number of ports for ${logical_device_id} was 0
330
331Validate Logical Device Flows
332 [Arguments] ${logical_device_id}
333 [Documentation] Validate Logical Device Flows are listed and are > 0
334 ${rc} ${output}= Run and Return Rc and Output
335 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${logical_device_id} -o json
336 Should Be Equal As Integers ${rc} 0
337 ${jsondata}= To Json ${output}
338 Log ${jsondata}
339 ${length}= Get Length ${jsondata}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700340 Should Be True ${length} > 0 Number of flows for ${logical_device_id} was 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400341
342Retrieve Peer List From OLT
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700343 [Arguments] ${olt_peer_list}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400344 [Documentation] Retrieve the list of peer device id list from port list
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700345 ${rc} ${output}= Run and Return Rc and Output
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800346 ... ${VOLTCTL_CONFIG}; voltctl device port list ${olt_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400347 Should Be Equal As Integers ${rc} 0
348 ${jsondata}= To Json ${output}
349 Log ${jsondata}
350 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700351 ${matched}= Set Variable False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400352 FOR ${INDEX} IN RANGE 0 ${length}
353 ${value}= Get From List ${jsondata} ${INDEX}
354 ${type}= Get From Dictionary ${value} type
355 ${peers}= Get From Dictionary ${value} peers
Andy Bavierb63f6d22020-03-12 15:34:37 -0700356 ${matched}= Set Variable If '${type}' == 'PON_OLT' True False
357 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400358 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700359 Should Be True ${matched} No PON port found for OLT ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400360 ${length}= Get Length ${peers}
361 FOR ${INDEX} IN RANGE 0 ${length}
362 ${value}= Get From List ${peers} ${INDEX}
363 ${peer_id}= Get From Dictionary ${value} deviceid
364 Append To List ${olt_peer_list} ${peer_id}
365 END
366
367Validate OLT Peer Id List
368 [Arguments] ${olt_peer_id_list}
369 [Documentation] Match each entry in the ${olt_peer_id_list} against ONU device ids.
370 FOR ${peer_id} IN @{olt_peer_id_list}
371 Match OLT Peer Id ${peer_id}
372 END
373
374Match OLT Peer Id
375 [Arguments] ${olt_peer_id}
376 [Documentation] Lookup the OLT Peer Id in against the list of ONU device Ids
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700377 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400378 Should Be Equal As Integers ${rc} 0
379 ${jsondata}= To Json ${output}
380 Log ${jsondata}
381 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700382 ${matched}= Set Variable False
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700383 FOR ${INDEX} IN RANGE 0 ${length}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400384 ${value}= Get From List ${jsondata} ${INDEX}
385 ${devid}= Get From Dictionary ${value} id
Andy Bavierb63f6d22020-03-12 15:34:37 -0700386 ${matched}= Set Variable If '${devid}' == '${olt_peer_id}' True False
387 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400388 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700389 Should Be True ${matched} Peer id ${olt_peer_id} does not match any ONU device id
Gilles Depatieb5682f82019-10-31 10:39:45 -0400390
391Validate ONU Peer Id
392 [Arguments] ${olt_device_id} ${List_ONU_Serial}
393 [Documentation] Match each ONU peer to that of the OLT device id
394 FOR ${onu_serial} IN @{List_ONU_Serial}
395 ${onu_dev_id}= Get Device ID From SN ${onu_serial}
396 Match ONU Peer Id ${onu_dev_id}
397 END
398
399Match ONU Peer Id
400 [Arguments] ${onu_dev_id}
401 [Documentation] Match an ONU peer to that of the OLT device id
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800402 ${rc} ${output}= Run and Return Rc and Output
403 ... ${VOLTCTL_CONFIG}; voltctl device port list ${onu_dev_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400404 Should Be Equal As Integers ${rc} 0
405 ${jsondata}= To Json ${output}
406 Log ${jsondata}
407 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700408 ${matched}= Set Variable False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400409 FOR ${INDEX} IN RANGE 0 ${length}
410 ${value}= Get From List ${jsondata} ${INDEX}
411 ${type}= Get From Dictionary ${value} type
412 ${peers}= Get From Dictionary ${value} peers
Andy Bavierb63f6d22020-03-12 15:34:37 -0700413 ${matched}= Set Variable If '${type}' == 'PON_ONU' True False
414 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400415 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700416 Should Be True ${matched} No PON port found for ONU ${onu_dev_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400417 ${length}= Get Length ${peers}
418 FOR ${INDEX} IN RANGE 0 ${length}
419 ${value}= Get From List ${peers} ${INDEX}
420 ${peer_id}= Get From Dictionary ${value} deviceid
421 END
422 Should Be Equal '${peer_id}' '${olt_device_id}'
423 ... Mismatch between ONU peer ${peer_id} and OLT device id ${olt_device_id} values=False
Kailash6f5acb62019-08-28 14:38:45 -0700424
Kailash6f5acb62019-08-28 14:38:45 -0700425Get Device ID From SN
426 [Arguments] ${serial_number}
427 [Documentation] Gets the device id by matching for ${serial_number}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700428 ${rc} ${id}= Run and Return Rc and Output
Andy Bavier8fca0452019-12-16 15:30:11 -0700429 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=SerialNumber=${serial_number} --format='{{.Id}}'
430 Should Be Equal As Integers ${rc} 0
431 Log ${id}
Kailash6f5acb62019-08-28 14:38:45 -0700432 [Return] ${id}
433
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700434Get Logical Device ID From SN
435 [Arguments] ${serial_number}
436 [Documentation] Gets the device id by matching for ${serial_number}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700437 ${rc} ${id}= Run and Return Rc and Output
Scott Baker2ab2a0c2020-06-05 12:51:47 -0700438 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice list --filter=Desc.SerialNum=${serial_number} --format='{{.Id}}'
Andy Bavier8fca0452019-12-16 15:30:11 -0700439 Should Be Equal As Integers ${rc} 0
440 Log ${id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700441 [Return] ${id}
442
Gilles Depatieb5682f82019-10-31 10:39:45 -0400443Build ONU SN List
444 [Arguments] ${serial_numbers}
445 [Documentation] Appends all ONU SNs to the ${serial_numbers} list
446 FOR ${INDEX} IN RANGE 0 ${num_onus}
447 Append To List ${serial_numbers} ${hosts.src[${INDEX}].onu}
448 END
449
450Get SN From Device ID
451 [Arguments] ${device_id}
452 [Documentation] Gets the device id by matching for ${device_id}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700453 ${rc} ${sn}= Run and Return Rc and Output
Andy Bavier8fca0452019-12-16 15:30:11 -0700454 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=Id=${device_id} --format='{{.SerialNumber}}'
Gilles Depatieb5682f82019-10-31 10:39:45 -0400455 Should Be Equal As Integers ${rc} 0
Andy Bavier8fca0452019-12-16 15:30:11 -0700456 Log ${sn}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400457 [Return] ${sn}
458
Scott Baker60e570d2020-02-02 22:10:13 -0800459Get Parent ID From Device ID
460 [Arguments] ${device_id}
461 [Documentation] Gets the device id by matching for ${device_id}
462 ${rc} ${pid}= Run and Return Rc and Output
463 ... ${VOLTCTL_CONFIG}; voltctl device list --filter=Id=${device_id} --format='{{.ParentId}}'
464 Should Be Equal As Integers ${rc} 0
465 Log ${pid}
466 [Return] ${pid}
467
Kailash6f5acb62019-08-28 14:38:45 -0700468Validate Device Removed
469 [Arguments] ${id}
470 [Documentation] Verifys that device, ${serial_number}, has been removed
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700471 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device list -o json
Andy Bavier8fca0452019-12-16 15:30:11 -0700472 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700473 ${jsondata}= To Json ${output}
474 Log ${jsondata}
475 ${length}= Get Length ${jsondata}
476 @{ids}= Create List
Zack Williamsec53a1b2019-09-16 15:50:52 -0700477 FOR ${INDEX} IN RANGE 0 ${length}
478 ${value}= Get From List ${jsondata} ${INDEX}
479 ${device_id}= Get From Dictionary ${value} id
480 Append To List ${ids} ${device_id}
481 END
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700482 List Should Not Contain Value ${ids} ${id}
Suchitra Vemuricd2f64f2020-02-18 18:30:27 -0800483
484Reboot ONU
485 [Arguments] ${onu_id} ${src} ${dst}
486 [Documentation] Using voltctl command reboot ONU and verify that ONU comes up to running state
487 ${rc} ${devices}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device reboot ${onu_id}
488 Should Be Equal As Integers ${rc} 0
489 Run Keyword and Ignore Error Wait Until Keyword Succeeds 60s 1s Validate Device
490 ... ENABLED DISCOVERED UNREACHABLE ${onu_id} onu=True
Matteo Scandolo142e6272020-04-29 17:36:59 -0700491
492Assert ONUs in Voltha
493 [Arguments] ${count}
494 [Documentation] Check that a certain number of devices reached the ACTIVE/ENABLE state
495 ${rc1} ${devices}= Run and Return Rc and Output
496 ... ${VOLTCTL_CONFIG}; voltctl device list | grep -v OLT | grep ACTIVE | wc -l
497 Should Be Equal As Integers ${rc1} 0
498 Should Be Equal As Integers ${devices} ${count}
499
500Wait for ONUs in VOLTHA
501 [Arguments] ${count}
502 [Documentation] Waits until a certain number of devices reached the ACTIVE/ENABLE state
503 Wait Until Keyword Succeeds 10m 5s Assert ONUs In Voltha ${count}
504
505Count Logical Devices flows
506 [Documentation] Count the flows across logical devices in VOLTHA
507 [Arguments] ${targetFlows}
508 ${output}= Get Logical Device List From Voltha
509 ${logical_devices}= To Json ${output}
510 ${total_flows}= Set Variable 0
511 FOR ${device} IN @{logical_devices}
512 ${rc} ${flows}= Run and Return Rc and Output
513 ... ${VOLTCTL_CONFIG}; voltctl logicaldevice flows ${device['id']} | grep -v ID | wc -l
514 Should Be Equal As Integers ${rc} 0
515 ${total_flows}= Evaluate ${total_flows} + ${flows}
516 END
Matteo Scandolo616daab2020-05-13 11:49:24 -0700517 ${msg}= Format String Found {total_flows} flows of {targetFlows} expected
518 ... total_flows=${total_flows} targetFlows=${targetFlows}
519 Log ${msg}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700520 Should Be Equal As Integers ${targetFlows} ${total_flows}
521
522Wait for Logical Devices flows
523 [Documentation] Waits until the flows have been provisioned in the logical device
524 [Arguments] ${workflow} ${uni_count} ${olt_count} ${provisioned}
Andrea Campanella70cf0a72020-05-27 10:55:15 +0200525 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700526 ${targetFlows}= Calculate flows by workflow ${workflow} ${uni_count} ${olt_count} ${provisioned}
Andrea Campanella70cf0a72020-05-27 10:55:15 +0200527 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700528 Log ${targetFlows}
529 # TODO extend Validate Logical Device Flows to check the correct number of flows
530 Wait Until Keyword Succeeds 10m 5s Count Logical Devices flows ${targetFlows}
531
Matteo Scandolo616daab2020-05-13 11:49:24 -0700532Count OpenOLT Device Flows
533 [Documentation] Count the flows across openolt devices in VOLTHA
534 [Arguments] ${targetFlows}
535 ${output}= Get Device List from Voltha by type openolt
536 ${devices}= To Json ${output}
537 ${total_flows}= Set Variable 0
538 FOR ${device} IN @{devices}
539 ${rc} ${flows}= Run and Return Rc and Output
540 ... ${VOLTCTL_CONFIG}; voltctl device flows ${device['id']} | grep -v ID | wc -l
541 Should Be Equal As Integers ${rc} 0
542 ${total_flows}= Evaluate ${total_flows} + ${flows}
543 END
544 ${msg}= Format String Found {total_flows} flows of {targetFlows} expected
545 ... total_flows=${total_flows} targetFlows=${targetFlows}
546 Log ${msg}
547 Should Be Equal As Integers ${targetFlows} ${total_flows}
548
549Wait for OpenOLT Devices flows
550 [Documentation] Waits until the flows have been provisioned in the openolt devices
551 [Arguments] ${workflow} ${uni_count} ${olt_count} ${provisioned}
Andrea Campanella70cf0a72020-05-27 10:55:15 +0200552 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandolo616daab2020-05-13 11:49:24 -0700553 # In the physical device we only have 2 data plane flows (on the PON) instead of 4
Matteo Scandolo96dbe432020-05-28 10:51:57 -0700554 ${beforeFlows}= Calculate flows by workflow ${workflow} ${uni_count} ${olt_count} ${provisioned}
555 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
556 ${afterFlows}= Evaluate ${beforeFlows} - (${uni_count} * 2)
557 ${targetFlows}= Set Variable If $provisioned=='true' ${afterFlows} ${beforeFlows}
Matteo Scandolo616daab2020-05-13 11:49:24 -0700558 Log ${targetFlows}
559 Wait Until Keyword Succeeds 10m 5s Count OpenOLT Device Flows ${targetFlows}