blob: 3b8df5380d22d2f518ced79f68ada93d01a21f17 [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
Matteo Scandolo5899be12020-11-11 15:38:07 -080031 ${rc} ${output}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} 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 Scandolo5899be12020-11-11 15:38:07 -080043 ... voltctl -c ${VOLTCTL_CONFIG} device create -t ${type} -H ${ip}:${port}
44 Log ${device_id}
Kailash6f5acb62019-08-28 14:38:45 -070045 Should Be Equal As Integers ${rc} 0
46 [Return] ${device_id}
47
48Enable Device
49 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -070050 [Documentation] Enables a device in VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -070051 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080052 ... voltctl -c ${VOLTCTL_CONFIG} device enable ${device_id}
Kailash6f5acb62019-08-28 14:38:45 -070053 Should Be Equal As Integers ${rc} 0
54
Suchitra Vemuri6db89412019-11-14 14:52:54 -080055Disable Device
56 [Arguments] ${device_id}
Hardik Windlassaaea3402020-03-10 19:45:45 +053057 [Documentation] Disables a device in VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -070058 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080059 ... voltctl -c ${VOLTCTL_CONFIG} device disable ${device_id}
Suchitra Vemuri6db89412019-11-14 14:52:54 -080060 Should Be Equal As Integers ${rc} 0
61
Hardik Windlassaaea3402020-03-10 19:45:45 +053062Delete Device
63 [Arguments] ${device_id}
64 [Documentation] Deletes a device in VOLTHA
65 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080066 ... voltctl -c ${VOLTCTL_CONFIG} device delete ${device_id}
Hardik Windlassaaea3402020-03-10 19:45:45 +053067 Should Be Equal As Integers ${rc} 0
68
Hemadf003682020-04-28 21:22:22 +053069Reboot Device
70 [Arguments] ${device_id}
71 [Documentation] Reboot the OLT using voltctl command
72 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080073 ... voltctl -c ${VOLTCTL_CONFIG} device reboot ${device_id}
Hemadf003682020-04-28 21:22:22 +053074 Should Be Equal As Integers ${rc} 0
75
David Bainbridgef81cd642019-11-20 00:14:47 +000076Disable 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}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070081 ${rc} ${devices}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080082 ... voltctl -c ${VOLTCTL_CONFIG} device list -m 8MB ${arg} --orderby Root -q | xargs echo -n
David Bainbridgef81cd642019-11-20 00:14:47 +000083 Should Be Equal As Integers ${rc} 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -070084 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080085 ... voltctl -c ${VOLTCTL_CONFIG} device disable ${devices}
David Bainbridgef81cd642019-11-20 00:14:47 +000086 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
87
88Test Devices Disabled In Voltha
89 [Documentation] Tests to verify that all devices in VOLTHA are disabled
90 [Arguments] ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070091 ${rc} ${count}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -080092 ... voltctl -c ${VOLTCTL_CONFIG} device list -m 8MB --filter '${filter},AdminState!=DISABLED' -q | wc -l
David Bainbridgef81cd642019-11-20 00:14:47 +000093 Should Be Equal As Integers ${rc} 0
94 Should Be Equal As Integers ${count} 0
95
96Delete Devices In Voltha
97 [Documentation] Disables all the known devices in voltha
98 [Arguments] ${filter}
99 ${arg}= Set Variable ${EMPTY}
100 ${arg}= Run Keyword If len('${filter}'.strip()) != 0 Set Variable --filter ${filter}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700101 ${rc} ${devices}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800102 ... voltctl -c ${VOLTCTL_CONFIG} device list ${arg} -m 8MB --orderby Root -q | xargs echo -n
David Bainbridgef81cd642019-11-20 00:14:47 +0000103 Should Be Equal As Integers ${rc} 0
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700104 ${rc} ${output}= Run Keyword If len('${devices}') != 0 Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800105 ... voltctl -c ${VOLTCTL_CONFIG} device delete ${devices}
David Bainbridgef81cd642019-11-20 00:14:47 +0000106 Run Keyword If len('${devices}') != 0 Should Be Equal As Integers ${rc} 0
107
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700108Get Device Flows from Voltha
109 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700110 [Documentation] Gets device flows from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700111 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800112 ... voltctl -c ${VOLTCTL_CONFIG} device flows ${device_id} -m 8MB
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700113 Should Be Equal As Integers ${rc} 0
114 [Return] ${output}
115
116Get Logical Device Output from Voltha
117 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700118 [Documentation] Gets logicaldevice flows and ports from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700119 ${rc1} ${flows}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800120 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice flows ${device_id}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700121 ${rc2} ${ports}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800122 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice port list ${device_id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700123 Log ${flows}
124 Log ${ports}
125 Should Be Equal As Integers ${rc1} 0
126 Should Be Equal As Integers ${rc2} 0
127
128Get Device Output from Voltha
129 [Arguments] ${device_id}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700130 [Documentation] Gets device flows and ports from VOLTHA
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700131 ${rc1} ${flows}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800132 ... voltctl -c ${VOLTCTL_CONFIG} device flows ${device_id} -m 8MB
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700133 ${rc2} ${ports}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800134 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${device_id} -m 8MB
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700135 Log ${flows}
136 Log ${ports}
137 Should Be Equal As Integers ${rc1} 0
138 Should Be Equal As Integers ${rc2} 0
139
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800140Get Device List from Voltha
141 [Documentation] Gets Device List Output from Voltha
Matteo Scandolo5899be12020-11-11 15:38:07 -0800142 ${rc1} ${devices}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} device list -m 8MB
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800143 Log ${devices}
144 Should Be Equal As Integers ${rc1} 0
145
Matteo Scandolo616daab2020-05-13 11:49:24 -0700146Get Device List from Voltha by type
147 [Documentation] Gets Device List Output from Voltha applying filtering by device type
148 [Arguments] ${type}
149 ${rc1} ${devices}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800150 ... voltctl -c ${VOLTCTL_CONFIG} device list -m 8MB -f Type=${type} -o json
Matteo Scandolo616daab2020-05-13 11:49:24 -0700151 Log ${devices}
152 Should Be Equal As Integers ${rc1} 0
153 Return From Keyword ${devices}
154
Matteo Scandolo142e6272020-04-29 17:36:59 -0700155Get Logical Device List from Voltha
156 [Documentation] Gets Logical Device List Output from Voltha (in json format)
Andrea Campanella80655eb2020-07-10 15:49:22 +0200157 ${rc1} ${devices}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800158 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice list -m 8MB -o json
Matteo Scandolo142e6272020-04-29 17:36:59 -0700159 Log ${devices}
160 Should Be Equal As Integers ${rc1} 0
161 Return From Keyword ${devices}
162
Kailash6f5acb62019-08-28 14:38:45 -0700163Validate Device
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700164 [Documentation]
ubuntu6b6e7d42020-03-02 12:35:42 -0800165 ... Parses the output of "voltctl device list" and inspects a device ${id}, specified as either
166 ... the serial number or device ID. Arguments are matched for device states of: "admin_state",
167 ... "oper_status", and "connect_status"
168 [Arguments] ${admin_state} ${oper_status} ${connect_status}
169 ... ${id}=${EMPTY} ${onu_reason}=${EMPTY} ${onu}=False
Matteo Scandolo5899be12020-11-11 15:38:07 -0800170 ${rc} ${output}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} device list -m 8MB -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400171 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700172 ${jsondata}= To Json ${output}
Kailash6f5acb62019-08-28 14:38:45 -0700173 ${length}= Get Length ${jsondata}
ubuntu6b6e7d42020-03-02 12:35:42 -0800174 ${matched}= Set Variable False
Zack Williamsec53a1b2019-09-16 15:50:52 -0700175 FOR ${INDEX} IN RANGE 0 ${length}
176 ${value}= Get From List ${jsondata} ${INDEX}
Scott Baker780b65f2020-05-22 14:03:15 -0700177 ${jsonCamelCaseFieldnames}= Run Keyword And Return Status
178 ... Dictionary Should Contain Key ${value} adminState
179 ${astate}= Run Keyword If ${jsonCamelCaseFieldNames}
180 ... Get From Dictionary ${value} adminState
181 ... ELSE
182 ... Get From Dictionary ${value} adminstate
183 ${opstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
184 ... Get From Dictionary ${value} operStatus
185 ... ELSE
186 ... Get From Dictionary ${value} operstatus
187 ${cstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
188 ... Get From Dictionary ${value} connectStatus
189 ... ELSE
190 ... Get From Dictionary ${value} connectstatus
191 ${sn}= Run Keyword If ${jsonCamelCaseFieldNames}
192 ... Get From Dictionary ${value} serialNumber
193 ... ELSE
194 ... Get From Dictionary ${value} serialnumber
Gilles Depatieb5682f82019-10-31 10:39:45 -0400195 ${devId}= Get From Dictionary ${value} id
Zack Williamsec53a1b2019-09-16 15:50:52 -0700196 ${mib_state}= Get From Dictionary ${value} reason
ubuntu6b6e7d42020-03-02 12:35:42 -0800197 ${matched}= Set Variable If '${sn}' == '${id}' or '${devId}' == '${id}' True False
Andy Bavierb63f6d22020-03-12 15:34:37 -0700198 Exit For Loop If ${matched}
Zack Williamsec53a1b2019-09-16 15:50:52 -0700199 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700200 Should Be True ${matched} No match found for ${id} to validate device
Matteo Scandolo5e10b282019-11-25 10:54:32 -0700201 Log ${value}
ubuntu6b6e7d42020-03-02 12:35:42 -0800202 Should Be Equal '${astate}' '${admin_state}' Device ${sn} admin_state != ${admin_state}
Gilles Depatie675a2062019-10-22 12:44:42 -0400203 ... values=False
ubuntu6b6e7d42020-03-02 12:35:42 -0800204 Should Be Equal '${opstatus}' '${oper_status}' Device ${sn} oper_status != ${oper_status}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400205 ... values=False
ubuntu6b6e7d42020-03-02 12:35:42 -0800206 Should Be Equal '${cstatus}' '${connect_status}' Device ${sn} conn_status != ${connect_status}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400207 ... values=False
Matteo Scandolo74bd5c32020-12-08 09:52:19 -0800208 Run Keyword If '${onu}' == 'True' Should Contain '${onu_reason}' '${mib_state}'
ubuntu6b6e7d42020-03-02 12:35:42 -0800209 ... Device ${sn} mib_state incorrect (${mib_state}) values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400210
211Validate OLT Device
ubuntu6b6e7d42020-03-02 12:35:42 -0800212 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${id}=${EMPTY}
213 [Documentation] Parses the output of "voltctl device list" and inspects device ${id}, specified
214 ... as either its serial numbner or device ID. Match on OLT Serial number or Device Id and inspect states
215 Validate Device ${admin_state} ${oper_status} ${connect_status} ${id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400216
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800217Validate OLT Devices
218 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${ids}=${EMPTY}
219 [Documentation] Parses the output of "voltctl device list" and inspects device ${id}, specified
220 ... as either its serial numbner or device ID. Match on OLT Serial number or Device Id and inspect states
221 FOR ${I} IN RANGE 0 ${olt_count}
222 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
223 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
224 Validate Device ${admin_state} ${oper_status} ${connect_status} ${olt_device_id}
225 END
226
Gilles Depatieb5682f82019-10-31 10:39:45 -0400227Validate ONU Devices
228 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${List_ONU_Serial}
Andy Bavierf1f26ed2020-03-18 10:59:07 -0700229 ... ${onu_reason}=omci-flows-pushed
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700230 [Documentation] Parses the output of "voltctl device list" and inspects device ${List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400231 ... Iteratively match on each Serial number contained in ${List_ONU_Serial} and inspect
232 ... states including MIB state
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700233 FOR ${serial_number} IN @{List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400234 Validate Device ${admin_state} ${oper_status} ${connect_status} ${serial_number}
Andy Bavierf1f26ed2020-03-18 10:59:07 -0700235 ... onu_reason=${onu_reason} onu=True
Debasish28130d02020-03-16 11:05:26 +0000236 END
237
Gilles Depatieb5682f82019-10-31 10:39:45 -0400238Validate Device Port Types
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700239 [Documentation]
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800240 ... Parses the output of voltctl device port list <device_id> and matches the port types listed
Andy Bavier90eb1a12020-03-26 11:54:35 -0700241 [Arguments] ${device_id} ${pon_type} ${ethernet_type} ${all_active}=True
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700242 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800243 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${device_id} -m 8MB -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400244 Should Be Equal As Integers ${rc} 0
245 ${jsondata}= To Json ${output}
246 Log ${jsondata}
247 ${length}= Get Length ${jsondata}
248 FOR ${INDEX} IN RANGE 0 ${length}
249 ${value}= Get From List ${jsondata} ${INDEX}
Scott Baker780b65f2020-05-22 14:03:15 -0700250 ${jsonCamelCaseFieldnames}= Run Keyword And Return Status
251 ... Dictionary Should Contain Key ${value} adminState
252 ${astate}= Run Keyword If ${jsonCamelCaseFieldNames}
Hardik Windlass2b37e712020-06-12 02:13:17 +0530253 ... Get From Dictionary ${value} adminState
Scott Baker780b65f2020-05-22 14:03:15 -0700254 ... ELSE
Hardik Windlass2b37e712020-06-12 02:13:17 +0530255 ... Get From Dictionary ${value} adminstate
Scott Baker780b65f2020-05-22 14:03:15 -0700256 ${opstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
257 ... Get From Dictionary ${value} operStatus
258 ... ELSE
Hardik Windlass2b37e712020-06-12 02:13:17 +0530259 ... Get From Dictionary ${value} operstatus
Gilles Depatieb5682f82019-10-31 10:39:45 -0400260 ${type}= Get From Dictionary ${value} type
Hemaf64d34c2020-03-25 00:40:17 +0530261 Should Be Equal '${astate}' 'ENABLED' Device ${device_id} port admin_state != ENABLED values=False
Andy Bavier90eb1a12020-03-26 11:54:35 -0700262 Run Keyword If ${all_active} Should Be Equal '${opstatus}' 'ACTIVE'
263 ... Device ${device_id} port oper_status != ACTIVE values=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400264 Should Be True '${type}' == '${pon_type}' or '${type}' == '${ethernet_type}'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700265 ... Device ${device_id} port type is neither ${pon_type} or ${ethernet_type}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400266 END
267
268Validate OLT Port Types
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800269 [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 -0700270 [Arguments] ${pon_type} ${ethernet_type}
271 Validate Device Port Types ${olt_device_id} ${pon_type} ${ethernet_type}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400272
273Validate ONU Port Types
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700274 [Arguments] ${List_ONU_Serial} ${pon_type} ${ethernet_type}
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800275 [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 -0700276 ... and matches the port types listed
Gilles Depatieb5682f82019-10-31 10:39:45 -0400277 FOR ${serial_number} IN @{List_ONU_Serial}
278 ${onu_dev_id}= Get Device ID From SN ${serial_number}
Andy Bavier90eb1a12020-03-26 11:54:35 -0700279 # Only first UNI port is ACTIVE; the rest are in DISCOVERED operstatus
280 Validate Device Port Types ${onu_dev_id} ${pon_type} ${ethernet_type} all_active=False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400281 END
282
283Validate Device Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000284 [Arguments] ${device_id} ${flow_count}=${EMPTY}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400285 [Documentation] Parses the output of voltctl device flows <device_id> and expects flow count > 0
Andrea Campanella80655eb2020-07-10 15:49:22 +0200286 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800287 ... voltctl -c ${VOLTCTL_CONFIG} device flows ${device_id} -m 8MB -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400288 Should Be Equal As Integers ${rc} 0
289 ${jsondata}= To Json ${output}
290 Log ${jsondata}
291 ${length}= Get Length ${jsondata}
292 Log 'Number of flows = ' ${length}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000293 Run Keyword If '${flow_count}' == '${EMPTY}' Should Be True ${length} > 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400294 ... Number of flows for ${device_id} was 0
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000295 ... ELSE Should Be True ${length} == ${flow_count}
296 ... Number of flows for ${device_id} was not ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400297
298Validate OLT Flows
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800299 [Arguments] ${flow_count}=${EMPTY} ${olt_device_id}=${EMPTY}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000300 [Documentation] Parses the output of voltctl device flows ${olt_device_id}
301 ... and expects flow count == ${flow_count}
302 Validate Device Flows ${olt_device_id} ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400303
304Validate ONU Flows
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000305 [Arguments] ${List_ONU_Serial} ${flow_count}=${EMPTY}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400306 [Documentation] Parses the output of voltctl device flows for each ONU SN listed in ${List_ONU_Serial}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000307 ... and expects flow count == ${flow_count}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700308 FOR ${serial_number} IN @{List_ONU_Serial}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400309 ${onu_dev_id}= Get Device ID From SN ${serial_number}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000310 Validate Device Flows ${onu_dev_id} ${flow_count}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400311 END
312
TorstenThieme401af432020-06-11 15:53:53 +0000313Validate ONU Devices With Duration
314 [Documentation]
315 ... Parses the output of "voltctl device list" and inspects all devices ${List_ONU_Serial},
316 ... Iteratively match on each Serial number contained in ${List_ONU_Serial} and inspect
317 ... states including MIB state.
318 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${onu_reason}
319 ... ${List_ONU_Serial} ${startTime} ${print2console}=False ${output_file}=${EMPTY}
TorstenThiemefd7e7ba2020-11-06 13:57:57 +0000320 ... ${alternate_reason}=${EMPTY}
Matteo Scandolo5899be12020-11-11 15:38:07 -0800321 ${rc} ${output}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} device list -m 8MB -o json
TorstenThieme401af432020-06-11 15:53:53 +0000322 Should Be Equal As Integers ${rc} 0
323 ${timeCurrent} = Get Current Date
324 ${timeTotalMs} = Subtract Date From Date ${timeCurrent} ${startTime} result_format=number
325 ${jsondata}= To Json ${output}
326 ${length}= Get Length ${jsondata}
327 FOR ${INDEX} IN RANGE 0 ${length}
328 ${matched}= Set Variable False
329 ${value}= Get From List ${jsondata} ${INDEX}
330 ${jsonCamelCaseFieldnames}= Run Keyword And Return Status
331 ... Dictionary Should Contain Key ${value} adminState
332 ${astate}= Run Keyword If ${jsonCamelCaseFieldNames}
333 ... Get From Dictionary ${value} adminState
334 ... ELSE
335 ... Get From Dictionary ${value} adminstate
336 ${opstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
337 ... Get From Dictionary ${value} operStatus
338 ... ELSE
339 ... Get From Dictionary ${value} operstatus
340 ${cstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
341 ... Get From Dictionary ${value} connectStatus
342 ... ELSE
343 ... Get From Dictionary ${value} connectstatus
344 ${sn}= Run Keyword If ${jsonCamelCaseFieldNames}
345 ... Get From Dictionary ${value} serialNumber
346 ... ELSE
347 ... Get From Dictionary ${value} serialnumber
348 ${mib_state}= Get From Dictionary ${value} reason
349 ${onu_id}= Get Index From List ${List_ONU_Serial} ${sn}
350 ${matched}= Set Variable If -1 != ${onu_id} True False
351 ${matched}= Set Variable If '${astate}' == '${admin_state}' ${matched} False
352 ${matched}= Set Variable If '${opstatus}' == '${oper_status}' ${matched} False
353 ${matched}= Set Variable If '${cstatus}' == '${connect_status}' ${matched} False
TorstenThiemec3c23232021-01-13 13:06:31 +0000354 ${len}= Get Length ${alternate_reason}
TorstenThieme105c5982021-01-21 09:50:27 +0000355 ${matches}= Run Keyword If ${len} >= 1 Get Match Count ${alternate_reason} ${mib_state}
356 ... ELSE Set Variable 0
TorstenThiemec3c23232021-01-13 13:06:31 +0000357 ${matched}= Set Variable If '${mib_state}' == '${onu_reason}' or ${matches} >= 1
TorstenThiemefd7e7ba2020-11-06 13:57:57 +0000358 ... ${matched} False
TorstenThieme401af432020-06-11 15:53:53 +0000359 Run Keyword If ${matched} and ${print2console} Log
360 ... \r\nONU ${sn} reached the state ${onu_reason} after ${timeTotalMs} sec. console=yes
361 Run Keyword If ${matched} and ('${output_file}'!='${EMPTY}') Append To File ${output_file}
362 ... \r\nONU ${sn} reached the state ${onu_reason} after ${timeTotalMs} sec.
363 Run Keyword If ${matched} Remove Values From List ${List_ONU_Serial} ${sn}
364 END
365 Should Be Empty ${List_ONU_Serial} List ${List_ONU_Serial} not empty
366
TorstenThieme9949b172020-06-16 10:00:15 +0000367Validate ONU Devices MIB State With Duration
368 [Documentation]
369 ... Parses the output of "voltctl device list" and inspects all devices ${List_ONU_Serial},
370 ... Iteratively match on each Serial number contained in ${List_ONU_Serial} and inspect MIB state.
371 [Arguments] ${onu_reason}
372 ... ${List_ONU_Serial} ${startTime} ${print2console}=False ${output_file}=${EMPTY}
373 ${type} = Set Variable brcm_openomci_onu
Andrea Campanella80655eb2020-07-10 15:49:22 +0200374 ${voltctl_commad} = Catenate SEPARATOR=
375 ... voltctl device list -m 8MB -f Type=${type} -f Reason=${onu_reason} --format '{{.SerialNumber}}'
376 ${rc} ${output}= Run and Return Rc and Output ${voltctl_commad}
TorstenThieme9949b172020-06-16 10:00:15 +0000377 Should Be Equal As Integers ${rc} 0
378 ${timeCurrent} = Get Current Date
379 ${timeTotalMs} = Subtract Date From Date ${timeCurrent} ${startTime} result_format=number
380 @{outputdata} = Split String ${output}
381 ${outputlength} = Get Length ${outputdata}
382 ${onulength} = Get Length ${List_ONU_Serial}
383 ${Matches} = Run Keyword If ${outputlength}<=${onulength}
384 ... Compare Lists ${outputdata} ${List_ONU_Serial}
385 ... ELSE Compare Lists ${List_ONU_Serial} ${outputdata}
386 ${length} = Get Length ${Matches}
387 FOR ${INDEX} IN RANGE 0 ${length}
388 ${sn}= Get From List ${Matches} ${INDEX}
389 Run Keyword If ${print2console} Log
390 ... \r\nONU ${sn} reached the state ${onu_reason} after ${timeTotalMs} sec. console=yes
391 Run Keyword If ('${output_file}'!='${EMPTY}') Append To File ${output_file}
392 ... \r\nONU ${sn} reached the state ${onu_reason} after ${timeTotalMs} sec.
393 Remove Values From List ${List_ONU_Serial} ${sn}
394 END
395 Should Be Empty ${List_ONU_Serial} List ${List_ONU_Serial} not empty
396
TorstenThiemefd7e7ba2020-11-06 13:57:57 +0000397Validate ONU Device By Device Id
398 [Documentation]
399 ... Parses the output of "voltctl device list" filtered by device id and inspects states including reason.
400 [Arguments] ${admin_state} ${oper_status} ${connect_status} ${onu_reason} ${onu_id}
Matteo Scandolo5899be12020-11-11 15:38:07 -0800401 ${cmd} Catenate voltctl -c ${VOLTCTL_CONFIG} device list --filter=Id=${onu_id} -m 8MB -o json
TorstenThiemefd7e7ba2020-11-06 13:57:57 +0000402 ${rc} ${output}= Run and Return Rc and Output ${cmd}
403 Should Be Equal As Integers ${rc} 0
404 ${jsondata}= To Json ${output}
405 ${length}= Get Length ${jsondata}
406 Should Be Equal As Integers ${length} 1 No match found for ${onu_id} to validate device
407 ${value}= Get From List ${jsondata} 0
408 Log ${value}
409 ${jsonCamelCaseFieldnames}= Run Keyword And Return Status
410 ... Dictionary Should Contain Key ${value} adminState
411 ${astate}= Run Keyword If ${jsonCamelCaseFieldNames}
412 ... Get From Dictionary ${value} adminState
413 ... ELSE
414 ... Get From Dictionary ${value} adminstate
415 ${opstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
416 ... Get From Dictionary ${value} operStatus
417 ... ELSE
418 ... Get From Dictionary ${value} operstatus
419 ${cstatus}= Run Keyword If ${jsonCamelCaseFieldNames}
420 ... Get From Dictionary ${value} connectStatus
421 ... ELSE
422 ... Get From Dictionary ${value} connectstatus
423 ${sn}= Run Keyword If ${jsonCamelCaseFieldNames}
424 ... Get From Dictionary ${value} serialNumber
425 ... ELSE
426 ... Get From Dictionary ${value} serialnumber
427 ${devId}= Get From Dictionary ${value} id
428 ${mib_state}= Get From Dictionary ${value} reason
429 Should Be Equal '${devId}' '${onu_id}' No match found for ${onu_id} to validate device
430 ... values=False
431 Should Be Equal '${astate}' '${admin_state}' Device ${sn} admin_state != ${admin_state}
432 ... values=False
433 Should Be Equal '${opstatus}' '${oper_status}' Device ${sn} oper_status != ${oper_status}
434 ... values=False
435 Should Be Equal '${cstatus}' '${connect_status}' Device ${sn} conn_status != ${connect_status}
436 ... values=False
437 Should Be Equal '${mib_state}' '${onu_reason}'
438 ... Device ${sn} mib_state incorrect (${mib_state}) values=False
439
440
TorstenThieme9949b172020-06-16 10:00:15 +0000441Compare Lists
442 [Documentation]
443 ... Compares both lists and put all matches in the returned list
444 [Arguments] ${ListIterate} ${ListCompare}
445 @{list} = Create List
446 ${length} = Get Length ${ListIterate}
447 FOR ${INDEX} IN RANGE 0 ${length}
448 ${sn}= Get From List ${ListIterate} ${INDEX}
449 ${onu_id}= Get Index From List ${ListCompare} ${sn}
450 Run Keyword If -1 != ${onu_id} Append To List ${list} ${sn}
451 END
452 [Return] ${list}
453
Gilles Depatieb5682f82019-10-31 10:39:45 -0400454Validate Logical Device
455 [Documentation] Validate Logical Device is listed
Matteo Scandolo5899be12020-11-11 15:38:07 -0800456 ${rc} ${output}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} logicaldevice list -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400457 Should Be Equal As Integers ${rc} 0
458 ${jsondata}= To Json ${output}
459 Log ${jsondata}
460 ${length}= Get Length ${jsondata}
461 FOR ${INDEX} IN RANGE 0 ${length}
462 ${value}= Get From List ${jsondata} ${INDEX}
463 ${devid}= Get From Dictionary ${value} id
Scott Baker2ab2a0c2020-06-05 12:51:47 -0700464 ${rootdev}= Get From Dictionary ${value} rootDeviceId
465 ${desc}= Get From Dictionary ${value} desc
466 ${sn}= Get From Dictionary ${desc} serialNum
Gilles Depatieb5682f82019-10-31 10:39:45 -0400467 Exit For Loop
468 END
469 Should Be Equal '${rootdev}' '${olt_device_id}' Root Device does not match ${olt_device_id} values=False
470 Should Be Equal '${sn}' '${BBSIM_OLT_SN}' Logical Device ${sn} does not match ${BBSIM_OLT_SN}
471 ... values=False
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700472 [Return] ${devid}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400473
474Validate Logical Device Ports
475 [Arguments] ${logical_device_id}
476 [Documentation] Validate Logical Device Ports are listed and are > 0
477 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800478 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice port list ${logical_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400479 Should Be Equal As Integers ${rc} 0
480 ${jsondata}= To Json ${output}
481 Log ${jsondata}
482 ${length}= Get Length ${jsondata}
483 Should Be True ${length} > 0 Number of ports for ${logical_device_id} was 0
484
485Validate Logical Device Flows
486 [Arguments] ${logical_device_id}
487 [Documentation] Validate Logical Device Flows are listed and are > 0
488 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800489 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice flows ${logical_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400490 Should Be Equal As Integers ${rc} 0
491 ${jsondata}= To Json ${output}
492 Log ${jsondata}
493 ${length}= Get Length ${jsondata}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700494 Should Be True ${length} > 0 Number of flows for ${logical_device_id} was 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400495
Hardik Windlass16cdf962020-04-29 15:26:50 +0530496Retrieve OLT PON Ports
497 [Arguments] ${olt_device_id}
498 [Documentation] Retrieves the list of PON ports from the OLT device
499 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800500 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${olt_device_id} -o json
Hardik Windlass16cdf962020-04-29 15:26:50 +0530501 Should Be Equal As Integers ${rc} 0
502 ${jsondata}= To Json ${output}
503 Log ${jsondata}
504 ${length}= Get Length ${jsondata}
505 ${olt_pon_list}= Create List
506 FOR ${INDEX} IN RANGE 0 ${length}
507 ${value}= Get From List ${jsondata} ${INDEX}
508 ${type}= Get From Dictionary ${value} type
509 ${portno}= Get From Dictionary ${value} portNo
510 ${peers}= Get From Dictionary ${value} peers
511 ${len_peers}= Get Length ${peers}
512 Run Keyword If '${type}' == 'PON_OLT' and ${len_peers} > 0
513 ... Append To List ${olt_pon_list} ${portno}
514 END
515 [Return] ${olt_pon_list}
516
517Retrieve Peer List From OLT PON Port
518 [Arguments] ${olt_device_id} ${pon_port}
519 [Documentation] Retrieves the list of peer device ids list from the OLT PON port
520 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800521 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${olt_device_id} -o json
Hardik Windlass16cdf962020-04-29 15:26:50 +0530522 Should Be Equal As Integers ${rc} 0
523 ${jsondata}= To Json ${output}
524 Log ${jsondata}
525 ${length}= Get Length ${jsondata}
526 ${matched}= Set Variable False
527 FOR ${INDEX} IN RANGE 0 ${length}
528 ${value}= Get From List ${jsondata} ${INDEX}
529 ${type}= Get From Dictionary ${value} type
530 ${portno}= Get From Dictionary ${value} portNo
531 ${peers}= Get From Dictionary ${value} peers
532 ${matched}= Set Variable If '${type}' == 'PON_OLT' and '${portno}' == '${pon_port}' True False
533 Exit For Loop If ${matched}
534 END
535 Should Be True ${matched} No PON port found for OLT ${olt_device_id}
536 ${length}= Get Length ${peers}
537 ${olt_peer_list}= Create List
538 FOR ${INDEX} IN RANGE 0 ${length}
539 ${value}= Get From List ${peers} ${INDEX}
540 ${peer_id}= Get From Dictionary ${value} deviceId
541 Append To List ${olt_peer_list} ${peer_id}
542 END
543 [Return] ${olt_peer_list}
544
545Validate OLT PON Port Status
546 [Arguments] ${olt_device_id} ${pon_port} ${admin_state} ${oper_status}
547 [Documentation] Verifies the state of the PON port of the OLT
548 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800549 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${olt_device_id} -o json
Hardik Windlass16cdf962020-04-29 15:26:50 +0530550 Should Be Equal As Integers ${rc} 0
551 ${jsondata}= To Json ${output}
552 Log ${jsondata}
553 ${length}= Get Length ${jsondata}
554 ${matched}= Set Variable False
555 FOR ${INDEX} IN RANGE 0 ${length}
556 ${value}= Get From List ${jsondata} ${INDEX}
557 ${type}= Get From Dictionary ${value} type
558 ${portno}= Get From Dictionary ${value} portNo
559 ${astate}= Get From Dictionary ${value} adminState
560 ${opstatus}= Get From Dictionary ${value} operStatus
561 ${matched}= Set Variable If '${type}' == 'PON_OLT' and '${portno}' == '${pon_port}' True False
562 Exit For Loop If ${matched}
563 END
564 Should Be True ${matched} No PON port found for OLT ${olt_device_id} ${pon_port}
565 Log ${value}
566 Should Be Equal '${astate}' '${admin_state}' OLT PON Port admin_state != ${admin_state}
567 ... values=False
568 Should Be Equal '${opstatus}' '${oper_status}' OLT PON Port oper_status != ${oper_status}
569 ... values=False
570
571DisableOrEnable OLT PON Port
572 [Arguments] ${operation} ${olt_device_id} ${portno}
573 [Documentation] Disables or Enables the PON port of the OLT
574 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800575 ... voltctl -c ${VOLTCTL_CONFIG} device port ${operation} ${olt_device_id} ${portno}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530576 Should Be Equal As Integers ${rc} 0
577
Gilles Depatieb5682f82019-10-31 10:39:45 -0400578Retrieve Peer List From OLT
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700579 [Arguments] ${olt_peer_list}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400580 [Documentation] Retrieve the list of peer device id list from port list
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700581 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800582 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${olt_device_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400583 Should Be Equal As Integers ${rc} 0
584 ${jsondata}= To Json ${output}
585 Log ${jsondata}
586 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700587 ${matched}= Set Variable False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400588 FOR ${INDEX} IN RANGE 0 ${length}
589 ${value}= Get From List ${jsondata} ${INDEX}
590 ${type}= Get From Dictionary ${value} type
591 ${peers}= Get From Dictionary ${value} peers
Andy Bavierb63f6d22020-03-12 15:34:37 -0700592 ${matched}= Set Variable If '${type}' == 'PON_OLT' True False
593 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400594 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700595 Should Be True ${matched} No PON port found for OLT ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400596 ${length}= Get Length ${peers}
597 FOR ${INDEX} IN RANGE 0 ${length}
598 ${value}= Get From List ${peers} ${INDEX}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530599 ${peer_id}= Get From Dictionary ${value} deviceId
Gilles Depatieb5682f82019-10-31 10:39:45 -0400600 Append To List ${olt_peer_list} ${peer_id}
601 END
602
603Validate OLT Peer Id List
604 [Arguments] ${olt_peer_id_list}
605 [Documentation] Match each entry in the ${olt_peer_id_list} against ONU device ids.
606 FOR ${peer_id} IN @{olt_peer_id_list}
607 Match OLT Peer Id ${peer_id}
608 END
609
610Match OLT Peer Id
611 [Arguments] ${olt_peer_id}
612 [Documentation] Lookup the OLT Peer Id in against the list of ONU device Ids
Matteo Scandolo5899be12020-11-11 15:38:07 -0800613 ${rc} ${output}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} device list -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400614 Should Be Equal As Integers ${rc} 0
615 ${jsondata}= To Json ${output}
616 Log ${jsondata}
617 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700618 ${matched}= Set Variable False
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700619 FOR ${INDEX} IN RANGE 0 ${length}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400620 ${value}= Get From List ${jsondata} ${INDEX}
621 ${devid}= Get From Dictionary ${value} id
Andy Bavierb63f6d22020-03-12 15:34:37 -0700622 ${matched}= Set Variable If '${devid}' == '${olt_peer_id}' True False
623 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400624 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700625 Should Be True ${matched} Peer id ${olt_peer_id} does not match any ONU device id
Gilles Depatieb5682f82019-10-31 10:39:45 -0400626
627Validate ONU Peer Id
628 [Arguments] ${olt_device_id} ${List_ONU_Serial}
629 [Documentation] Match each ONU peer to that of the OLT device id
630 FOR ${onu_serial} IN @{List_ONU_Serial}
631 ${onu_dev_id}= Get Device ID From SN ${onu_serial}
632 Match ONU Peer Id ${onu_dev_id}
633 END
634
635Match ONU Peer Id
636 [Arguments] ${onu_dev_id}
637 [Documentation] Match an ONU peer to that of the OLT device id
David K. Bainbridgebd5ebd22020-02-04 10:01:18 -0800638 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800639 ... voltctl -c ${VOLTCTL_CONFIG} device port list ${onu_dev_id} -o json
Gilles Depatieb5682f82019-10-31 10:39:45 -0400640 Should Be Equal As Integers ${rc} 0
641 ${jsondata}= To Json ${output}
642 Log ${jsondata}
643 ${length}= Get Length ${jsondata}
Andy Bavierb63f6d22020-03-12 15:34:37 -0700644 ${matched}= Set Variable False
Gilles Depatieb5682f82019-10-31 10:39:45 -0400645 FOR ${INDEX} IN RANGE 0 ${length}
646 ${value}= Get From List ${jsondata} ${INDEX}
647 ${type}= Get From Dictionary ${value} type
648 ${peers}= Get From Dictionary ${value} peers
Andy Bavierb63f6d22020-03-12 15:34:37 -0700649 ${matched}= Set Variable If '${type}' == 'PON_ONU' True False
650 Exit For Loop If ${matched}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400651 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700652 Should Be True ${matched} No PON port found for ONU ${onu_dev_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400653 ${length}= Get Length ${peers}
654 FOR ${INDEX} IN RANGE 0 ${length}
655 ${value}= Get From List ${peers} ${INDEX}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530656 ${peer_id}= Get From Dictionary ${value} deviceId
Gilles Depatieb5682f82019-10-31 10:39:45 -0400657 END
658 Should Be Equal '${peer_id}' '${olt_device_id}'
659 ... Mismatch between ONU peer ${peer_id} and OLT device id ${olt_device_id} values=False
Kailash6f5acb62019-08-28 14:38:45 -0700660
Kailash6f5acb62019-08-28 14:38:45 -0700661Get Device ID From SN
662 [Arguments] ${serial_number}
663 [Documentation] Gets the device id by matching for ${serial_number}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700664 ${rc} ${id}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800665 ... voltctl -c ${VOLTCTL_CONFIG} device list --filter=SerialNumber=${serial_number} --format='{{.Id}}'
Andy Bavier8fca0452019-12-16 15:30:11 -0700666 Should Be Equal As Integers ${rc} 0
667 Log ${id}
Kailash6f5acb62019-08-28 14:38:45 -0700668 [Return] ${id}
669
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700670Get Logical Device ID From SN
671 [Arguments] ${serial_number}
672 [Documentation] Gets the device id by matching for ${serial_number}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700673 ${rc} ${id}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800674 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice list --filter=Desc.SerialNum=${serial_number} --format='{{.Id}}'
Andy Bavier8fca0452019-12-16 15:30:11 -0700675 Should Be Equal As Integers ${rc} 0
676 Log ${id}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700677 [Return] ${id}
678
Gilles Depatieb5682f82019-10-31 10:39:45 -0400679Build ONU SN List
Andrea Campanella6391f842020-11-16 10:01:18 +0100680 [Arguments] ${serial_numbers} ${olt_serial_number}=${EMPTY} ${num_onus}=${num_all_onus}
681 [Documentation] Appends all ONU SNs for the given OLT to the ${serial_numbers} list
Gilles Depatieb5682f82019-10-31 10:39:45 -0400682 FOR ${INDEX} IN RANGE 0 ${num_onus}
Andrea Campanella6391f842020-11-16 10:01:18 +0100683 Run Keyword IF "${olt_serial_number}"=="${hosts.src[${INDEX}].olt}" or "${olt_serial_number}"=="${EMPTY}"
684 ... Append To List ${serial_numbers} ${hosts.src[${INDEX}].onu}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400685 END
686
687Get SN From Device ID
688 [Arguments] ${device_id}
689 [Documentation] Gets the device id by matching for ${device_id}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700690 ${rc} ${sn}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800691 ... voltctl -c ${VOLTCTL_CONFIG} device list --filter=Id=${device_id} --format='{{.SerialNumber}}'
Gilles Depatieb5682f82019-10-31 10:39:45 -0400692 Should Be Equal As Integers ${rc} 0
Andy Bavier8fca0452019-12-16 15:30:11 -0700693 Log ${sn}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400694 [Return] ${sn}
695
Scott Baker60e570d2020-02-02 22:10:13 -0800696Get Parent ID From Device ID
697 [Arguments] ${device_id}
698 [Documentation] Gets the device id by matching for ${device_id}
699 ${rc} ${pid}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800700 ... voltctl -c ${VOLTCTL_CONFIG} device list --filter=Id=${device_id} --format='{{.ParentId}}'
Scott Baker60e570d2020-02-02 22:10:13 -0800701 Should Be Equal As Integers ${rc} 0
702 Log ${pid}
703 [Return] ${pid}
704
Kailash6f5acb62019-08-28 14:38:45 -0700705Validate Device Removed
706 [Arguments] ${id}
707 [Documentation] Verifys that device, ${serial_number}, has been removed
Matteo Scandolo5899be12020-11-11 15:38:07 -0800708 ${rc} ${output}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} device list -o json
Andy Bavier8fca0452019-12-16 15:30:11 -0700709 Should Be Equal As Integers ${rc} 0
Kailash6f5acb62019-08-28 14:38:45 -0700710 ${jsondata}= To Json ${output}
711 Log ${jsondata}
712 ${length}= Get Length ${jsondata}
713 @{ids}= Create List
Zack Williamsec53a1b2019-09-16 15:50:52 -0700714 FOR ${INDEX} IN RANGE 0 ${length}
715 ${value}= Get From List ${jsondata} ${INDEX}
716 ${device_id}= Get From Dictionary ${value} id
717 Append To List ${ids} ${device_id}
718 END
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700719 List Should Not Contain Value ${ids} ${id}
Suchitra Vemuricd2f64f2020-02-18 18:30:27 -0800720
Andrea Campanella4e507882020-11-26 11:33:11 +0100721Validate all ONUS for OLT Removed
722 [Arguments] ${num_all_onus} ${hosts} ${olt_serial_number} ${timeout}
723 [Documentation] Verifys that all the ONUS for OLT ${serial_number}, has been removed
724 FOR ${J} IN RANGE 0 ${num_all_onus}
725 ${src}= Set Variable ${hosts.src[${J}]}
726 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
727 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
728 ... Validate Device Removed ${src['onu']}
729 END
730
Suchitra Vemuricd2f64f2020-02-18 18:30:27 -0800731Reboot ONU
TorstenThiemefd7e7ba2020-11-06 13:57:57 +0000732 [Arguments] ${onu_id} ${validate_device}=True
Suchitra Vemuricd2f64f2020-02-18 18:30:27 -0800733 [Documentation] Using voltctl command reboot ONU and verify that ONU comes up to running state
Matteo Scandolo5899be12020-11-11 15:38:07 -0800734 ${rc} ${devices}= Run and Return Rc and Output voltctl -c ${VOLTCTL_CONFIG} device reboot ${onu_id}
Suchitra Vemuricd2f64f2020-02-18 18:30:27 -0800735 Should Be Equal As Integers ${rc} 0
TorstenThiemefd7e7ba2020-11-06 13:57:57 +0000736 Run Keyword If ${validate_device} Run Keyword And Continue On Failure Wait Until Keyword Succeeds
737 ... 60s 1s Validate ONU Device By Device Id ENABLED DISCOVERED REACHABLE rebooting ${onu_id}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700738
739Assert ONUs in Voltha
740 [Arguments] ${count}
741 [Documentation] Check that a certain number of devices reached the ACTIVE/ENABLE state
742 ${rc1} ${devices}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800743 ... voltctl -c ${VOLTCTL_CONFIG} -m 8M device list | grep -v OLT | grep ACTIVE | wc -l
Matteo Scandolo142e6272020-04-29 17:36:59 -0700744 Should Be Equal As Integers ${rc1} 0
745 Should Be Equal As Integers ${devices} ${count}
746
747Wait for ONUs in VOLTHA
748 [Arguments] ${count}
749 [Documentation] Waits until a certain number of devices reached the ACTIVE/ENABLE state
750 Wait Until Keyword Succeeds 10m 5s Assert ONUs In Voltha ${count}
751
752Count Logical Devices flows
753 [Documentation] Count the flows across logical devices in VOLTHA
754 [Arguments] ${targetFlows}
755 ${output}= Get Logical Device List From Voltha
756 ${logical_devices}= To Json ${output}
757 ${total_flows}= Set Variable 0
758 FOR ${device} IN @{logical_devices}
759 ${rc} ${flows}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800760 ... voltctl -c ${VOLTCTL_CONFIG} logicaldevice flows ${device['id']} | grep -v ID | wc -l
Matteo Scandolo142e6272020-04-29 17:36:59 -0700761 Should Be Equal As Integers ${rc} 0
762 ${total_flows}= Evaluate ${total_flows} + ${flows}
763 END
Matteo Scandolo616daab2020-05-13 11:49:24 -0700764 ${msg}= Format String Found {total_flows} flows of {targetFlows} expected
765 ... total_flows=${total_flows} targetFlows=${targetFlows}
766 Log ${msg}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700767 Should Be Equal As Integers ${targetFlows} ${total_flows}
768
769Wait for Logical Devices flows
770 [Documentation] Waits until the flows have been provisioned in the logical device
771 [Arguments] ${workflow} ${uni_count} ${olt_count} ${provisioned}
Andrea Campanella70cf0a72020-05-27 10:55:15 +0200772 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700773 ${targetFlows}= Calculate flows by workflow ${workflow} ${uni_count} ${olt_count} ${provisioned}
Andrea Campanella70cf0a72020-05-27 10:55:15 +0200774 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandolo142e6272020-04-29 17:36:59 -0700775 Log ${targetFlows}
776 # TODO extend Validate Logical Device Flows to check the correct number of flows
777 Wait Until Keyword Succeeds 10m 5s Count Logical Devices flows ${targetFlows}
778
Matteo Scandolo616daab2020-05-13 11:49:24 -0700779Count OpenOLT Device Flows
780 [Documentation] Count the flows across openolt devices in VOLTHA
781 [Arguments] ${targetFlows}
782 ${output}= Get Device List from Voltha by type openolt
783 ${devices}= To Json ${output}
784 ${total_flows}= Set Variable 0
785 FOR ${device} IN @{devices}
786 ${rc} ${flows}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800787 ... voltctl -c ${VOLTCTL_CONFIG} device flows ${device['id']} | grep -v ID | wc -l
Matteo Scandolo616daab2020-05-13 11:49:24 -0700788 Should Be Equal As Integers ${rc} 0
789 ${total_flows}= Evaluate ${total_flows} + ${flows}
790 END
791 ${msg}= Format String Found {total_flows} flows of {targetFlows} expected
792 ... total_flows=${total_flows} targetFlows=${targetFlows}
793 Log ${msg}
794 Should Be Equal As Integers ${targetFlows} ${total_flows}
795
796Wait for OpenOLT Devices flows
797 [Documentation] Waits until the flows have been provisioned in the openolt devices
798 [Arguments] ${workflow} ${uni_count} ${olt_count} ${provisioned}
Andrea Campanella70cf0a72020-05-27 10:55:15 +0200799 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandolo96dbe432020-05-28 10:51:57 -0700800 ${beforeFlows}= Calculate flows by workflow ${workflow} ${uni_count} ${olt_count} ${provisioned}
801 ... ${withEapol} ${withDhcp} ${withIgmp} ${withLldp}
Matteo Scandoloda854b02020-09-01 16:20:51 -0700802 # In the physical device we only have 2 data plane flows (on the PON) instead of 4
Matteo Scandolo96dbe432020-05-28 10:51:57 -0700803 ${afterFlows}= Evaluate ${beforeFlows} - (${uni_count} * 2)
Matteo Scandoloda854b02020-09-01 16:20:51 -0700804 # In the TT workflow we have multiple service,
805 # so we need to remove 6 flows per each UNI that are only on the ONU device
806 ${ttFlows}= Evaluate ${beforeFlows} - (${uni_count} * 6)
807 ${afterFlows}= Set Variable If $workflow=='tt' ${ttFlows} ${afterFlows}
Matteo Scandolo96dbe432020-05-28 10:51:57 -0700808 ${targetFlows}= Set Variable If $provisioned=='true' ${afterFlows} ${beforeFlows}
Matteo Scandolo616daab2020-05-13 11:49:24 -0700809 Log ${targetFlows}
Hardik Windlass2b37e712020-06-12 02:13:17 +0530810 Wait Until Keyword Succeeds 10m 5s Count OpenOLT Device Flows ${targetFlows}