blob: 098896ac30a3e0a6fc909cb3f1109873a9208cf7 [file] [log] [blame]
Joey Armstrong888f1ee2023-01-11 17:14:30 -05001# Copyright 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
Kailash92764922019-07-25 08:21:39 -07002#
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.
Kailash92764922019-07-25 08:21:39 -070014# robot test functions
15
16*** Settings ***
17Documentation Library for various utilities
18Library SSHLibrary
Kailash92764922019-07-25 08:21:39 -070019Library String
20Library DateTime
21Library Process
22Library Collections
23Library RequestsLibrary
24Library OperatingSystem
Andy Bavier63460da2020-02-20 14:35:12 -070025Library CORDRobot
26Library ImportResource resources=CORDRobot
TorstenThiemed4f48962020-12-08 12:17:19 +000027Resource ./voltctl.robot
Kailash92764922019-07-25 08:21:39 -070028
29*** Keywords ***
Kailash528f7c02019-07-31 10:55:49 -070030Check CLI Tools Configured
31 [Documentation] Tests that use 'voltctl' and 'kubectl' should execute this keyword in suite setup
32 # check voltctl and kubectl configured
Matteo Scandolo1eacdd82021-06-28 10:32:19 +020033 ${voltctl_rc} ${voltctl_output}= Run And Return Rc And Output voltctl -c ${VOLTCTL_CONFIG} device list
Hardik Windlass13803172021-04-26 08:17:07 +000034 Log ${voltctl_output}
35 ${kubectl_rc} ${kubectl_output}= Run And Return Rc And Output kubectl get pods
36 Log ${kubectl_output}
Gilles Depatie675a2062019-10-22 12:44:42 -040037 Run Keyword If ${voltctl_rc} != 0 or ${kubectl_rc} != 0 FATAL ERROR
38 ... VOLTCTL and KUBECTL not configured. Please configure before executing tests.
Gilles Depatieb5682f82019-10-31 10:39:45 -040039
40Send File To Onos
Zack Williamsa8fe75a2020-01-10 14:25:27 -070041 [Documentation] Send the content of the file to Onos to selected section of configuration
42 ... using Post Request
Huseyin Ahmet AYDIN42d3b712021-06-10 14:46:17 +000043 [Arguments] ${CONFIG_FILE} ${section}=${EMPTY}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070044 ${Headers}= Create Dictionary Content-Type application/json
45 ${File_Data}= OperatingSystem.Get File ${CONFIG_FILE}
46 Log ${Headers}
47 Log ${File_Data}
48 ${resp}= Post Request ONOS
49 ... /onos/v1/network/configuration/${section} headers=${Headers} data=${File_Data}
50 Should Be Equal As Strings ${resp.status_code} 200
Andy Bavier88cd9f62019-11-26 16:22:33 -070051
52Common Test Suite Setup
53 [Documentation] Setup the test suite
Andy Bavier88cd9f62019-11-26 16:22:33 -070054 Set Global Variable ${KUBECTL_CONFIG} export KUBECONFIG=%{KUBECONFIG}
Matteo Scandolo5899be12020-11-11 15:38:07 -080055 Set Global Variable ${VOLTCTL_CONFIG} %{VOLTCONFIG}
Andy Bavier88cd9f62019-11-26 16:22:33 -070056 ${k8s_node_ip}= Evaluate ${nodes}[0].get("ip")
ubuntu6b6e7d42020-03-02 12:35:42 -080057 ${ONOS_REST_IP}= Get Environment Variable ONOS_REST_IP ${k8s_node_ip}
58 ${ONOS_SSH_IP}= Get Environment Variable ONOS_SSH_IP ${k8s_node_ip}
59 Set Global Variable ${ONOS_REST_IP}
60 Set Global Variable ${ONOS_SSH_IP}
Andy Bavier88cd9f62019-11-26 16:22:33 -070061 ${k8s_node_user}= Evaluate ${nodes}[0].get("user")
62 ${k8s_node_pass}= Evaluate ${nodes}[0].get("pass")
63 Check CLI Tools Configured
64 ${onos_auth}= Create List karaf karaf
65 ${HEADERS} Create Dictionary Content-Type=application/json
ubuntu6b6e7d42020-03-02 12:35:42 -080066 Create Session ONOS http://${ONOS_REST_IP}:${ONOS_REST_PORT} auth=${ONOS_AUTH}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080067 ${num_olts} Get Length ${olts}
68 ${list_olts} Create List
Suchitra Vemuriac9785e2021-01-07 16:50:18 -080069 # Create olt list from the configuration file
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080070 FOR ${I} IN RANGE 0 ${num_olts}
71 ${ip} Evaluate ${olts}[${I}].get("ip")
72 ${user} Evaluate ${olts}[${I}].get("user")
73 ${pass} Evaluate ${olts}[${I}].get("pass")
74 ${serial_number} Evaluate ${olts}[${I}].get("serial")
75 ${olt_ssh_ip} Evaluate ${olts}[${I}].get("sship")
Andrea Campanella3dcce272021-01-15 16:04:47 +010076 ${type} Evaluate ${olts}[${I}].get("type")
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000077 ${power_switch_port} Evaluate ${olts}[${I}].get("power_switch_port")
Suchitra Vemuri09f878d2021-02-10 18:19:04 -080078 ${orig_olt_port} Evaluate ${olts}[${I}].get("oltPort")
79 ${port}= Set Variable If "${orig_olt_port}" == "None" ${OLT_PORT} ${orig_olt_port}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080080 ${onu_count}= Get ONU Count For OLT ${hosts.src} ${serial_number}
Suchitra Vemurife309412020-12-01 19:19:52 -080081 ${onu_list}= Get ONU List For OLT ${hosts.src} ${serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080082 ${olt} Create Dictionary ip ${ip} user ${user} pass
Andrea Campanella3dcce272021-01-15 16:04:47 +010083 ... ${pass} sn ${serial_number} onucount ${onu_count} type ${type}
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000084 ... sship ${olt_ssh_ip} oltport ${port} powerswitchport ${power_switch_port}
85 ... onus ${onu_list}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080086 Append To List ${list_olts} ${olt}
87 END
88 ${num_all_onus}= Get Length ${hosts.src}
89 ${num_all_onus}= Convert to String ${num_all_onus}
Andy Bavier88cd9f62019-11-26 16:22:33 -070090 #send sadis file to onos
Andy Baviera2691752019-11-27 12:18:38 -070091 ${sadis_file}= Get Variable Value ${sadis.file}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070092 Log To Console \nSadis File:${sadis_file}
Andy Bavier88cd9f62019-11-26 16:22:33 -070093 Run Keyword Unless '${sadis_file}' is '${None}' Send File To Onos ${sadis_file} apps/
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080094 Set Suite Variable ${num_all_onus}
95 Set Suite Variable ${num_olts}
96 Set Suite Variable ${list_olts}
97 ${olt_count}= Get Length ${list_olts}
98 Set Suite Variable ${olt_count}
Andrea Campanella3dcce272021-01-15 16:04:47 +010099 @{container_list}= Create List ${OLT_ADAPTER_APP_LABEL} adapter-open-onu voltha-api-server
Andy Bavier88cd9f62019-11-26 16:22:33 -0700100 ... voltha-ro-core voltha-rw-core-11 voltha-rw-core-12 voltha-ofagent
101 Set Suite Variable ${container_list}
102 ${datetime}= Get Current Date
suraj gour7f6d5fe2019-11-29 10:56:35 +0000103 Set Suite Variable ${datetime}
104
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800105Get ONU Count For OLT
106 [Arguments] ${src} ${serial_number}
107 [Documentation] Gets ONU Count for the specified OLT
108 ${src_length}= Get Length ${src}
109 ${count}= Set Variable 0
110 FOR ${I} IN RANGE 0 ${src_length}
111 ${sn} Evaluate ${src}[${I}].get("olt")
TorstenThiemed4f48962020-12-08 12:17:19 +0000112 ${count}= Run Keyword If '${serial_number}' == '${sn}' Evaluate ${count} + 1
113 ... ELSE Set Variable ${count}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800114 END
115 [Return] ${count}
116
Suchitra Vemurife309412020-12-01 19:19:52 -0800117Get ONU List For OLT
118 [Arguments] ${src} ${serial_number}
119 [Documentation] Gets ONU List for the specified OLT
120 ${src_length}= Get Length ${src}
121 ${onu_list}= Create List
122 FOR ${I} IN RANGE 0 ${src_length}
123 ${sn} Evaluate ${src}[${I}].get("olt")
Matteo Scandolo243288d2021-09-20 14:48:58 -0700124 Run Keyword If '${serial_number}' == '${sn}' Append To List ${onu_list} ${src}[${I}][onu]
Suchitra Vemurife309412020-12-01 19:19:52 -0800125 ... ELSE Set Variable ${onu_list}
126 END
127 [Return] ${onu_list}
128
suraj gour7f6d5fe2019-11-29 10:56:35 +0000129WPA Reassociate
suraj gour7f6d5fe2019-11-29 10:56:35 +0000130 [Documentation] Executes a particular wpa_cli reassociate, which performs force reassociation
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700131 [Arguments] ${iface} ${ip} ${user} ${pass}=${None}
132 ... ${container_type}=${None} ${container_name}=${None}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000133 #Below for loops are used instead of sleep time, to execute reassociate command and check status
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700134 FOR ${i} IN RANGE 70
135 ${output}= Login And Run Command On Remote System
136 ... wpa_cli -i ${iface} reassociate ${ip} ${user}
137 ... ${pass} ${container_type} ${container_name}
138 ${passed}= Run Keyword And Return Status Should Contain ${output} OK
Andy Bavierb63f6d22020-03-12 15:34:37 -0700139 Exit For Loop If ${passed}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700140 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700141 Should Be True ${passed} Status does not contain 'SUCCESS'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700142 FOR ${i} IN RANGE 70
143 ${output}= Login And Run Command On Remote System
Andy Bavierae4a17e2020-02-25 14:54:36 -0700144 ... wpa_cli -i ${iface} status | grep SUCCESS ${ip} ${user}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700145 ... ${pass} ${container_type} ${container_name}
146 ${passed}= Run Keyword And Return Status Should Contain ${output} SUCCESS
Andy Bavierb63f6d22020-03-12 15:34:37 -0700147 Exit For Loop If ${passed}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700148 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700149 Should Be True ${passed} Status does not contain 'SUCCESS'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700150
suraj gour7f6d5fe2019-11-29 10:56:35 +0000151Validate Authentication After Reassociate
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700152 [Arguments] ${auth_pass} ${iface} ${ip} ${user} ${pass}=${None}
153 ... ${container_type}=${None} ${container_name}=${None}
154 [Documentation]
155 ... Executes a particular reassociate request on the RG using wpa_cli.
156 ... auth_pass determines if authentication should pass
Andy Bavier84834d42020-02-25 13:49:50 -0700157 ${wpa_log}= Catenate SEPARATOR=. /tmp/wpa ${iface} log
158 ${output}= Login And Run Command On Remote System truncate -s 0 ${wpa_log}; cat ${wpa_log}
159 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
160 Log ${output}
161 Should Not Contain ${output} authentication completed successfully
suraj gour7f6d5fe2019-11-29 10:56:35 +0000162 WPA Reassociate ${iface} ${ip} ${user} ${pass} ${container_type} ${container_name}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700163 Run Keyword If '${auth_pass}' == 'True' Wait Until Keyword Succeeds ${timeout} 2s
Andy Bavier84834d42020-02-25 13:49:50 -0700164 ... Check Remote File Contents True ${wpa_log} ${iface}.*authentication completed successfully
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700165 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000166 Run Keyword If '${auth_pass}' == 'False' Sleep 20s
Suchitra Vemuri3cb29f82020-02-25 13:59:58 -0800167 Run Keyword If '${auth_pass}' == 'False' Check Remote File Contents False /tmp/wpa.log
Andy Bavier84834d42020-02-25 13:49:50 -0700168 ... ${iface}.*authentication completed successfully ${ip} ${user} ${pass}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700169 ... ${container_type} ${container_name}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000170
171Send Dhclient Request To Release Assigned IP
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700172 [Arguments] ${iface} ${ip} ${user} ${path_dhcpleasefile} ${pass}=${None}
173 ... ${container_type}=${None} ${container_name}=${None}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000174 [Documentation] Executes a dhclient with option to release ip against a particular interface on the RG (src)
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700175 ${result}= Login And Run Command On Remote System
176 ... dhclient -nw -r ${iface} && rm ${path_dhcpleasefile}/dhclient.* ${ip} ${user}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000177 ... ${pass} ${container_type} ${container_name}
178 Log ${result}
179 #Should Contain ${result} DHCPRELEASE
180 [Return] ${result}
suraj gour1ecfae92019-12-20 15:11:40 +0000181
182Check Remote File Contents For WPA Logs
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700183 [Arguments] ${file_should_exist} ${file} ${pattern} ${ip} ${user} ${pass}=${None}
184 ... ${container_type}=${None} ${container_name}=${None} ${prompt}=~$
suraj gour1ecfae92019-12-20 15:11:40 +0000185 [Documentation] Checks for particular pattern count in a file
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700186 ${result}= Login And Run Command On Remote System
187 ... cat ${file} | grep '${pattern}' | wc -l ${ip} ${user} ${pass}
suraj gour1ecfae92019-12-20 15:11:40 +0000188 ... ${container_type} ${container_name} ${prompt}
189 [Return] ${result}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000190
191Perform Sanity Test
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800192 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure
193 ... for all the ONUs connected to each OLT - ATT workflow
TorstenThiemec3c23232021-01-13 13:06:31 +0000194 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
195 ... In all other (common) cases flag has to be set False (default).
196 [Arguments] ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800197 FOR ${J} IN RANGE 0 ${num_olts}
198 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
199 ${onu_count}= Set Variable ${list_olts}[${J}][onucount]
200 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
201 ... ${olt_serial_number}
202 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000203 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800204 Perform Sanity Test Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${onu_count}
TorstenThiemec3c23232021-01-13 13:06:31 +0000205 ... ${supress_add_subscriber}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800206 END
207
208Perform Sanity Test Per OLT
TorstenThiemec3c23232021-01-13 13:06:31 +0000209 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000210 [Documentation] This keyword performs Sanity Test Procedure
211 ... Sanity test performs authentication, dhcp and pings for all the ONUs given for the POD
212 ... This keyword can be used to call in any other tests where sanity check is required
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800213 ... and avoids duplication of code. - ATT workflow
TorstenThiemec3c23232021-01-13 13:06:31 +0000214 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
215 ... In all other (common) cases flag has to be set False (default).
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800216 FOR ${I} IN RANGE 0 ${num_all_onus}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000217 ${src}= Set Variable ${hosts.src[${I}]}
218 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800219 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200220 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700221 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000222 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800223 # Check ONU port is Enabled in ONOS
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700224 Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000225 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Matteo Scandoloebf2be42021-09-22 09:46:50 -0700226 # Verify Default Meter in ONOS (valid only for ATT and only if subscriber is not provisioned)
227 Run Keyword Unless ${supress_add_subscriber}
228 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo243288d2021-09-20 14:48:58 -0700229 ... Verify Default Meter Present in ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700230 # Verify default EAPOL flows are added for the ONU port
TorstenThiemec3c23232021-01-13 13:06:31 +0000231 Run Keyword Unless ${supress_add_subscriber}
232 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700233 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800234 # Verify LLDP flow in ONOS
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800235 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800236 ... Verify LLDP Flow Added ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} 1
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800237 # Verify ONU state in voltha
Hardik Windlass58b23a32022-05-10 11:06:48 +0530238 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800239 ... ENABLED ACTIVE REACHABLE
240 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
241 # Perform Authentication
Andy Bavier84834d42020-02-25 13:49:50 -0700242 ${wpa_log}= Run Keyword If ${has_dataplane} Catenate SEPARATOR=.
243 ... /tmp/wpa ${src['dp_iface_name']} log
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700244 Run Keyword If ${has_dataplane} Validate Authentication True
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000245 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
Andy Bavier84834d42020-02-25 13:49:50 -0700246 ... ${src['container_type']} ${src['container_name']} ${wpa_log}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700247 Wait Until Keyword Succeeds ${timeout} 2
ubuntu6b6e7d42020-03-02 12:35:42 -0800248 ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
TorstenThiemec3c23232021-01-13 13:06:31 +0000249 Run Keyword Unless ${supress_add_subscriber}
TorstenThieme4e2168e2021-06-22 14:01:47 +0000250 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000251 ... volt-add-subscriber-access ${of_id} ${onu_port}
Suchitra Vemuri9da44302020-03-04 14:24:49 -0800252 # Verify that no pending flows exist for the ONU port
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700253 Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri9da44302020-03-04 14:24:49 -0800254 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Hardik Windlass21807632020-04-14 16:24:55 +0530255 # Verify subscriber access flows are added for the ONU port
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700256 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass21807632020-04-14 16:24:55 +0530257 ... Verify Subscriber Access Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
258 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['s_tag']}
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700259 # Verify subscriber EAPOL flow is installed
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700260 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700261 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
262 ... ${onu_port} ${src['c_tag']}
Hardik Windlass2a9b1592020-07-23 18:28:13 +0530263 # Verify Meters in ONOS
Hardik Windlass58b23a32022-05-10 11:06:48 +0530264 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass2a9b1592020-07-23 18:28:13 +0530265 ... Verify Meters in ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700266 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000267 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
268 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
269 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
270 ... ${dst['container_name']}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700271 Wait Until Keyword Succeeds ${timeout} 2s
ubuntu6b6e7d42020-03-02 12:35:42 -0800272 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000273 END
274
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000275Perform Sanity Test DT
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800276 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for DT workflow
TorstenThiemec3c23232021-01-13 13:06:31 +0000277 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
278 ... In all other (common) cases flag has to be set False (default).
279 [Arguments] ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800280 FOR ${J} IN RANGE 0 ${num_olts}
281 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
282 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
283 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
284 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
285 ... ${olt_serial_number}
286 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000287 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800288 Perform Sanity Test DT Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${num_onus}
TorstenThiemec3c23232021-01-13 13:06:31 +0000289 ... ${supress_add_subscriber}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800290 # Verify ONOS Flows
291 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
292 ${onos_flows_count}= Evaluate 4 * ${num_onus}
293 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
294 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
295 ... ${onos_flows_count}
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800296 # Verify LLDP flow in ONOS
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800297 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800298 ... Verify LLDP Flow Added ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} 1
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800299 # Verify VOLTHA Flows
300 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
301 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
302 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
303 ${onu_flows}= Set Variable 2
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800304 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000305 ... ${olt_flows} ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800306 ${List_ONU_Serial} Create List
307 Set Suite Variable ${List_ONU_Serial}
Suchitra Vemuri21a47fd2020-11-16 18:39:09 -0800308 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800309 Log ${List_ONU_Serial}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000310 Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800311 ... ${List_ONU_Serial} ${onu_flows}
312 END
313
314
315Perform Sanity Test DT Per OLT
TorstenThiemec3c23232021-01-13 13:06:31 +0000316 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000317 [Documentation] This keyword performs Sanity Test Procedure for DT Workflow
318 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
319 ... This keyword can be used to call in any other tests where sanity check is required
320 ... and avoids duplication of code.
TorstenThiemec3c23232021-01-13 13:06:31 +0000321 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
322 ... In all other (common) cases flag has to be set False (default).
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800323 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000324 ${src}= Set Variable ${hosts.src[${I}]}
325 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800326 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200327 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700328 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000329 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000330 # Check ONU port is Enabled in ONOS
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700331 Wait Until Keyword Succeeds 120s 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000332 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
TorstenThiemec3c23232021-01-13 13:06:31 +0000333 Run Keyword Unless ${supress_add_subscriber}
TorstenThieme4e2168e2021-06-22 14:01:47 +0000334 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000335 ... volt-add-subscriber-access ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530336 # Verify subscriber access flows are added for the ONU port
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700337 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass25e11702020-03-30 20:05:19 +0530338 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
339 ... ${onu_port} ${nni_port} ${src['s_tag']}
TorstenThiemea36068c2021-02-19 09:57:32 +0000340 # Verify ONU state in voltha
341 ${onu_reasons}= Create List omci-flows-pushed
Andrea Campanella753510e2022-04-28 23:26:27 +0200342 Run Keyword If ${supress_add_subscriber} Append To List ${onu_reasons} onu-reenabled
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700343 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000344 ... ENABLED ACTIVE REACHABLE
TorstenThiemec3c23232021-01-13 13:06:31 +0000345 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
Hardik Windlass2a9b1592020-07-23 18:28:13 +0530346 # Verify Meters in ONOS
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000347 Wait Until Keyword Succeeds ${timeout} 5s
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700348 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530349 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700350 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000351 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
352 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
353 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
354 ... ${dst['container_name']}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000355 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800356
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000357Perform Sanity Test DT FTTB
358 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for DT-FTTB workflow
359 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
360 ... In all other (common) cases flag has to be set False (default).
361 [Arguments] ${supress_add_subscriber}=False
362 FOR ${J} IN RANGE 0 ${num_olts}
363 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
364 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
365 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
366 ... ${olt_serial_number}
367 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
368 Perform Sanity Test DT FTTB Per OLT ${of_id} ${nni_port} ${olt_serial_number}
369 ... ${supress_add_subscriber}
370 END
371
372Perform Sanity Test DT FTTB Per OLT
373 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${supress_add_subscriber}=False
374 [Documentation] This keyword performs Sanity Test Procedure for DT-FTTB Workflow
375 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
376 ... This keyword can be used to call in any other tests where sanity check is required
377 ... and avoids duplication of code.
378 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
379 ... In all other (common) cases flag has to be set False (default).
380 FOR ${I} IN RANGE 0 ${num_all_onus}
381 ${src}= Set Variable ${hosts.src[${I}]}
382 ${dst}= Set Variable ${hosts.dst[${I}]}
383 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200384 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000385 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
386 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
387 # Check ONU port is Enabled in ONOS
388 Wait Until Keyword Succeeds 120s 2s
389 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
390 Run Keyword Unless ${supress_add_subscriber}
391 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
392 ... volt-add-subscriber-access ${of_id} ${onu_port}
393 # Verify ONOS flows are added for the ONU port
394 Wait Until Keyword Succeeds ${timeout} 5s
395 ... Verify ONOS Flows Added For DT FTTB ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
396 ... ${onu_port} ${nni_port} ${src['service']}
397 # Verify that the Subscriber is present at the given location
398 Wait Until Keyword Succeeds ${timeout} 5s
399 ... Verify Programmed Subscribers DT FTTB ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
400 ... ${onu_port} ${src['service']}
401 # Verify ONU state in voltha
402 ${onu_reasons}= Create List omci-flows-pushed
Andrea Campanella753510e2022-04-28 23:26:27 +0200403 Run Keyword If ${supress_add_subscriber} Append To List ${onu_reasons} onu-reenabled
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000404 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
405 ... ENABLED ACTIVE REACHABLE
406 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
407 # Verify Meters in ONOS
408 Wait Until Keyword Succeeds ${timeout} 5s
409 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlass256993e2022-05-24 09:55:46 +0530410 ... FTTB_SUBSCRIBER_TRAFFIC
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000411 # Verify Mac Learner Mappings
412 Wait Until Keyword Succeeds ${timeout} 5s Validate Mac Learner Mapping in ONOS
Hardik Windlass256993e2022-05-24 09:55:46 +0530413 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port} ${src['service'][0]['s_tag']}
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000414 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
415 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
416 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
417 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
418 ... ${dst['container_name']}
419 END
420
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800421Validate All OLT Flows
422 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for DT workflow
423 FOR ${J} IN RANGE 0 ${num_olts}
424 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
425 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
426 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
427 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
428 ... ${olt_serial_number}
429 Set Global Variable ${of_id}
430 # Verify ONOS Flows
431 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
432 ${onos_flows_count}= Evaluate 4 * ${num_onus}
433 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
434 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
435 ... ${onos_flows_count}
436 # Verify VOLTHA Flows
437 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
438 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
439 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
440 ${onu_flows}= Set Variable 2
441 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
442 ... ${olt_device_id}
443 ${List_ONU_Serial} Create List
444 Set Suite Variable ${List_ONU_Serial}
Andrea Campanella6391f842020-11-16 10:01:18 +0100445 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800446 Log ${List_ONU_Serial}
447 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
448 ... ${List_ONU_Serial} ${onu_flows}
449 END
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000450
TorstenThieme70bc5262021-01-19 12:12:55 +0000451Perform Sanity Tests TT
452 [Documentation] This keyword performs both Sanity Test Procedure for TT Workflow
453 ... Sanity Test TT for HSIA, VoD, VoIP services and Sanity Test TT for MCAST
454 ... For repeating sanity tests without subscriber changes set flag supress_add_subscriber=True.
455 ... In all other (common) cases flag has to be set False (default).
456 [Arguments] ${supress_add_subscriber}=False
457 Perform Sanity Test TT ${supress_add_subscriber}
TorstenThieme136ebf72021-02-26 14:27:07 +0000458 # run of mcast sanity test is currently limited for real HW
459 Run Keyword If ${has_dataplane} Perform Sanity Test TT MCAST ${supress_add_subscriber}
TorstenThieme70bc5262021-01-19 12:12:55 +0000460
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000461Provision Subscription TT
462 [Documentation] Provision Subscription TT
463 [Arguments] ${supress_add_subscriber}=False
464 FOR ${I} IN RANGE 0 ${num_all_onus}
465 ${src}= Set Variable ${hosts.src[${I}]}
466 ${dst}= Set Variable ${hosts.dst[${I}]}
467 ${service_type}= Get Variable Value ${src['service_type']} "null"
468 Run Keyword IF '${service_type}' != 'mcast' Provision Subscription for ONU TT ${src} ${dst}
469 ... ${supress_add_subscriber}
470 END
471
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700472Perform Sanity Test TT
473 [Documentation] This keyword performs Sanity Test Procedure for TT Workflow
474 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
475 ... This keyword can be used to call in any other tests where sanity check is required
476 ... and avoids duplication of code.
TorstenThieme70bc5262021-01-19 12:12:55 +0000477 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
478 ... In all other (common) cases flag has to be set False (default).
Hardik Windlassc609eb02022-02-22 11:28:37 +0000479 [Arguments] ${supress_add_subscriber}=False ${maclearning_enabled}=False
TorstenThieme1e207df2022-05-17 10:31:34 +0000480 @{onu_list}= Create List
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800481 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700482 ${src}= Set Variable ${hosts.src[${I}]}
483 ${dst}= Set Variable ${hosts.dst[${I}]}
484 ${service_type}= Get Variable Value ${src['service_type']} "null"
TorstenThieme1e207df2022-05-17 10:31:34 +0000485 ${sn}= Set Variable ${src['onu']}
486 # make sure add subscriber will be done only once per onu in case of single tag (not ${unitag_sub})
487 ${onu_id}= Get Index From List ${onu_list} ${sn}
488 ${supression_flag} Set Variable If not ${unitag_sub} and -1 != ${onu_id} True ${supress_add_subscriber}
489 Append To List ${onu_list} ${sn}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000490 Run Keyword IF '${service_type}' != 'mcast' Sanity Test TT one ONU ${src} ${dst}
TorstenThieme1e207df2022-05-17 10:31:34 +0000491 ... ${supression_flag} ${maclearning_enabled}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700492 END
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000493 # Verify Subscriber Access Flow Count
494 @{particular_onu_device_port}= Create List
495 FOR ${I} IN RANGE 0 ${num_all_onus}
496 ${src}= Set Variable ${hosts.src[${I}]}
497 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000498 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS
499 ... ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000500 Append To List ${particular_onu_device_port} ${onu_port}
501 END
502 ${list_onu_port}= Remove Duplicates ${particular_onu_device_port}
503 ${num_of_provisioned_onus}= Get Length ${list_onu_port}
504 FOR ${I} IN RANGE 0 ${olt_count}
505 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
506 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
Hardik Windlass315d6152021-06-09 08:22:44 +0000507 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000508 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
509 # Verify ONOS Flows
510 # Number of Access Flows on ONOS equals 16 * the Number of Active ONUs + 3 for default LLDP, IGMP and DHCP
511 ${onos_flows_count}= Run Keyword If ${has_dataplane} Evaluate 16 * ${num_of_provisioned_onus} + 3
512 ... ELSE Evaluate 15 * ${num_of_provisioned_onus} + 3
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700513 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000514 ... Verify Added Flow Count for OLT TT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
515 ... ${onos_flows_count}
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800516 # Verify LLDP flow in ONOS
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800517 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800518 ... Verify LLDP Flow Added ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} 1
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000519 # Verify VOLTHA Flows
520 # Number of per OLT Flows equals 10 * Number of Active ONUs + 3 for default LLDP, IGMP and DHCP
521 ${olt_flows}= Run Keyword If ${has_dataplane} Evaluate 10 * ${num_of_provisioned_onus} + 3
522 ... ELSE Evaluate 9 * ${num_of_provisioned_onus} + 3
523 # Number of per ONU Flows equals 6 for 3play service data plane + 4 for Trap to Host Flows
524 ${onu_flows}= Run Keyword If ${has_dataplane} Set Variable 10
525 ... ELSE Set Variable 9
526 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
527 ... ${olt_device_id}
528 ${List_ONU_Serial} Create List
529 Set Suite Variable ${List_ONU_Serial}
530 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
531 Log ${List_ONU_Serial}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000532 # TODO: Fix ${onu_flows} calculations based on UNIs provisioned
533 # Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
534 # ... ${List_ONU_Serial} ${onu_flows}
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000535 END
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700536
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000537Provision Subscription for ONU TT
538 [Documentation] This keyword performs provision services a single ONU for TT workflow
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700539 ... Tests for one ONU
TorstenThieme70bc5262021-01-19 12:12:55 +0000540 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
541 ... In all other (common) cases flag has to be set False (default).
542 [Arguments] ${src} ${dst} ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800543 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700544 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000545 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200546 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000547 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000548 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700549 # Check ONU port is Enabled in ONOS
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000550 Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000551 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassb1bda362021-11-24 11:54:36 +0000552 # Add subscriber
553 ${add_sub_cmd}= Run Keyword If ${unitag_sub}
554 ... Catenate volt-add-subscriber-unitag --tpId ${src['tp_id']} --sTag ${src['s_tag']}
555 ... --cTag ${src['c_tag']} ${src['onu']}-${src['uni_id']}
556 ... ELSE
557 ... Set Variable volt-add-subscriber-access ${of_id} ${onu_port}
TorstenThiemea36068c2021-02-19 09:57:32 +0000558 Run Keyword Unless ${supress_add_subscriber}
Hardik Windlassb1bda362021-11-24 11:54:36 +0000559 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${add_sub_cmd}
TorstenThieme1e207df2022-05-17 10:31:34 +0000560 # Verify no Pending Flows in ONOS in case of subscriber added, it is needed to check the correct ONU state in voltha
561 # First wait for pending flows exist, but sometimes ONOS is so fast, that we don't catch it...so wait max 10s and ignore err
562 Run Keyword Unless ${supress_add_subscriber} Run Keyword And Ignore Error
563 ... Wait Until Keyword Succeeds 10s 1s
564 ... Verify Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
565 # Then wait for pending flows are disappeared again
566 Run Keyword Unless ${supress_add_subscriber} Wait Until Keyword Succeeds ${timeout} 2s
567 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
TorstenThiemea36068c2021-02-19 09:57:32 +0000568 # Verify ONU state in voltha
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000569 ${onu_reasons}= Create List omci-flows-pushed onu-reenabled
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000570 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
TorstenThieme1e207df2022-05-17 10:31:34 +0000571 ... ENABLED ACTIVE REACHABLE ${src['onu']} onu=True onu_reason=${onu_reasons}
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000572
573Sanity Test TT one ONU
574 [Documentation] This keyword performs sanity test for a single ONU for TT workflow
575 ... Tests for one ONU
576 ... Assertions apply to HSIA, VoD, VoIP services
577 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
578 ... In all other (common) cases flag has to be set False (default).
Hardik Windlassc609eb02022-02-22 11:28:37 +0000579 [Arguments] ${src} ${dst} ${supress_add_subscriber}=False ${maclearning_enabled}=False
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000580 Provision Subscription for ONU TT ${src} ${dst} ${supress_add_subscriber}
581 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
582 Set Global Variable ${of_id}
583 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
584 ... ${of_id} ${src['uni_id']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700585 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
586 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
587 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
588 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
589 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
590 ... ${dst['container_name']}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000591 Run Keyword If '${src['service_type']}'!='hsia'
592 ... Run Keywords
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000593 ... Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri8d3b0032020-09-11 17:49:08 -0700594 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Suchitra Vemuri42819412020-10-01 17:45:43 -0700595 ... ${src['c_tag']}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000596 ... AND Run Keyword If ${maclearning_enabled}
597 ... Wait Until Keyword Succeeds ${timeout} 5s Validate Mac Learner Mapping in ONOS
598 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port} ${src['c_tag']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700599
600Perform Sanity Test TT MCAST
601 [Documentation] This keyword performs Sanity Test Procedure for TT Workflow
602 ... Adds subscribers
603 ... Validates for MCAST
TorstenThieme70bc5262021-01-19 12:12:55 +0000604 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
605 ... In all other (common) cases flag has to be set False (default).
606 [Arguments] ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800607 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700608 ${src}= Set Variable ${hosts.src[${I}]}
609 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700610 ${service_type}= Get Variable Value ${src['service_type']} "null"
611 Run Keyword IF '${service_type}' == 'mcast' Sanity Test TT MCAST one ONU ${src}
TorstenThiemea36068c2021-02-19 09:57:32 +0000612 ... ${dst} ${supress_add_subscriber}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700613 END
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700614
615Sanity Test TT MCAST one ONU
616 [Documentation] This keyword performs sanity test for a single ONU for TT workflow
617 ... Tests for one ONU
618 ... Assertions apply to MCAST services
TorstenThieme70bc5262021-01-19 12:12:55 +0000619 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
620 ... In all other (common) cases flag has to be set False (default).
621 [Arguments] ${src} ${dst} ${supress_add_subscriber}=False
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700622 # Check for iperf and jq tools
623 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf jq
624 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
625 ... ${src['container_name']}
626 Pass Execution If ${rc} != 0 Skipping test: iperf / jq not found on the RG
627
628 #Reset the IP on the interface
629 ${output}= Login And Run Command On Remote System sudo ifconfig ${src['dp_iface_name']} 0
630 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
631 # Kill iperf on BNG
632 ${rg_output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
633 ... sudo kill -9 `pidof iperf`
634 ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
635 ... ${dst['container_name']}
636
637 # Setup RG for Multi-cast test
638 ${output}= Login And Run Command On Remote System
639 ... sudo ifconfig ${src['dp_iface_name']} ${src['mcast_rg']} up ; sudo kill -9 `pidof iperf`
640 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
641 ${output}= Login And Run Command On Remote System
642 ... sudo ip route add ${src['mcast_grp_subnet_mask']} dev ${src['dp_iface_name']} scope link
643 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
644
645 # Perform operations for adding subscriber
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800646 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700647 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000648 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200649 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000650 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000651 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700652 # Check ONU port is Enabled in ONOS
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000653 Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000654 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
TorstenThiemea36068c2021-02-19 09:57:32 +0000655 Run Keyword Unless ${supress_add_subscriber}
TorstenThieme4e2168e2021-06-22 14:01:47 +0000656 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700657 ... volt-add-subscriber-access ${of_id} ${onu_port}
TorstenThiemea36068c2021-02-19 09:57:32 +0000658 # Verify ONU state in voltha
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000659 ${onu_reasons}= Create List omci-flows-pushed onu-reenabled
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000660 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700661 ... ENABLED ACTIVE REACHABLE
Matteo Scandolo74bd5c32020-12-08 09:52:19 -0800662 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700663
664 # Setup iperf on the BNG
665 ${server_output}= Login And Run Command On Remote System
666 ... sudo iperf -c ${dst['dp_iface_ip_qinq']} -u -T 32 -t 60 -i 1 &
667 ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
668 ... ${dst['container_name']}
669
670 # Setup iperf on the RG
671 ${rg_output}= Run Keyword and Continue On Failure Wait Until Keyword Succeeds 90s 5s
672 ... Login And Run Command On Remote System
673 ... rm -rf /tmp/rg_output ; sudo iperf -s -u -B ${dst['dp_iface_ip_qinq']} -i 1 -D >> /tmp/rg_output
674 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
675 Log ${rg_output}
676 Sleep 60s
677 ${output}= Run Keyword and Continue On Failure Wait Until Keyword Succeeds 90s 5s
678 ... Login And Run Command On Remote System
679 ... cat /tmp/rg_output | grep KBytes
680 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
681 Log ${output}
682 Should Contain ${output} KBytes
683
684 # Kill iperf on BNG
685 ${rg_output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
686 ... sudo kill -9 `pidof iperf`
687 ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
688 ... ${dst['container_name']}
689
690 # Kill iperf on the RG
691 ${output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
692 ... sudo kill -9 `pidof iperf`
693 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
694
Hardik Windlass62db9d92021-05-17 09:32:40 +0000695Setup Soak
696 [Documentation] Pre-test Setup for Soak Job
697 ${olt_ids} Create List
698 FOR ${I} IN RANGE 0 ${num_olts}
699 ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
700 ${olt_device_id}= Get Device ID From SN ${olt_serial_number}
701 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
702 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
703 ... ${olt_serial_number}
TorstenThiemedda37652021-11-11 16:22:05 +0000704 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass62db9d92021-05-17 09:32:40 +0000705 ${olt} Create Dictionary device_id ${olt_device_id} logical_id ${logical_id}
706 ... of_id ${of_id} sn ${olt_serial_number}
707 Append To List ${olt_ids} ${olt}
708 END
709 Set Global Variable ${olt_ids}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700710
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000711Setup
712 [Documentation] Pre-test Setup
Hardik Windlass4ed54502021-05-14 07:34:15 +0000713 [Arguments] ${skip_empty_device_list_test}=False
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000714 #test for empty device list
Hardik Windlass4ed54502021-05-14 07:34:15 +0000715 Run Keyword If '${skip_empty_device_list_test}'=='False' Test Empty Device List
Hardik Windlass5e214b22021-02-26 10:37:14 +0000716 # TBD: Need for this Sleep
717 Run Keyword If ${has_dataplane} Sleep 180s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800718 # Create a list of olt ids (logical and device_id)
719 ${olt_ids} Create List
720 FOR ${I} IN RANGE 0 ${num_olts}
721 #create/preprovision device
Andrea Campanella3dcce272021-01-15 16:04:47 +0100722 ${olt_device_id}= Run Keyword If "${list_olts}[${I}][type]" == "${None}"
Suchitra Vemuri09f878d2021-02-10 18:19:04 -0800723 ... Create Device ${list_olts}[${I}][ip] ${list_olts}[${I}][oltport]
724 ... ELSE Create Device ${list_olts}[${I}][ip] ${list_olts}[${I}][oltport] ${list_olts}[${I}][type]
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800725 ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
726 #Set Suite Variable ${olt_device_id}
727 #validate olt states
728 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass8b446492021-06-10 06:25:23 +0000729 ... Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN ${olt_device_id} by_dev_id=True
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800730 Sleep 5s
731 Enable Device ${olt_device_id}
Suchitra Vemuricf6e89c2021-03-24 19:14:15 -0700732 # Increasing the timer to incorporate wait time for in-band
733 Wait Until Keyword Succeeds 540s 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800734 ... Validate OLT Device ENABLED ACTIVE REACHABLE ${olt_serial_number}
735 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
736 # Set Suite Variable ${logical_id}
737 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
738 ... ${olt_serial_number}
739 ${olt} Create Dictionary device_id ${olt_device_id} logical_id ${logical_id}
740 ... of_id ${of_id} sn ${olt_serial_number}
741 Append To List ${olt_ids} ${olt}
742 END
743 Set Global Variable ${olt_ids}
744
745Get ofID From OLT List
746 [Documentation] Retrieves the corresponding of_id for the OLT serial number specified
747 [Arguments] ${serial_number}
748 FOR ${I} IN RANGE 0 ${olt_count}
749 ${sn}= Get From Dictionary ${olt_ids}[${I}] sn
Andrea Campanella317a94c2020-11-13 10:38:19 +0100750 ${of_id}= Run Keyword IF "${serial_number}"=="${sn}"
751 ... Get From Dictionary ${olt_ids}[${I}] of_id ELSE Set Variable ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800752 END
753 [Return] ${of_id}
754
755Get OLTDeviceID From OLT List
756 [Documentation] Retrieves the corresponding olt_device_id for the OLT serial number specified
757 [Arguments] ${serial_number}
Suchitra Vemuri4b8f4f52020-11-17 19:12:50 -0800758 ${olt_device_id}= Set Variable 0
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800759 FOR ${I} IN RANGE 0 ${olt_count}
760 ${sn}= Get From Dictionary ${olt_ids}[${I}] sn
Andrea Campanella317a94c2020-11-13 10:38:19 +0100761 ${olt_device_id}= Run Keyword IF "${serial_number}"=="${sn}"
762 ... Get From Dictionary ${olt_ids}[${I}] device_id ELSE Set Variable ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800763 END
764 [Return] ${olt_device_id}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000765
Andrea Campanellad848de02020-11-24 10:23:41 +0100766Get Num of Onus From OLT SN
767 [Documentation] Retrieves the corresponding number of ONUs for a given OLT based on serial number specified
768 [Arguments] ${serial_number}
769 ${num_of_olt_onus}= Set Variable 0
770 FOR ${I} IN RANGE 0 ${olt_count}
771 ${sn}= Get From Dictionary ${olt_ids}[${I}] sn
772 ${num_of_olt_onus}= Run Keyword IF "${serial_number}"=="${sn}"
773 ... Get From Dictionary ${list_olts}[${I}] onucount ELSE Set Variable ${num_of_olt_onus}
774 END
775 [Return] ${num_of_olt_onus}
776
Hardik Windlassaaea3402020-03-10 19:45:45 +0530777Validate ONUs After OLT Disable
778 [Documentation] Validates the ONUs state in Voltha, ONUs port state in ONOS
779 ... and that pings do not succeed After corresponding OLT is Disabled
Andrea Campanella4e507882020-11-26 11:33:11 +0100780 [Arguments] ${num_onus} ${olt_serial_number}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530781 FOR ${I} IN RANGE 0 ${num_onus}
782 ${src}= Set Variable ${hosts.src[${I}]}
783 ${dst}= Set Variable ${hosts.dst[${I}]}
Andrea Campanella4e507882020-11-26 11:33:11 +0100784 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800785 ${of_id}= Get ofID From OLT List ${src['olt']}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200786 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530787 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
788 ... ${of_id}
Girish Gowdra3f0fadb2021-11-08 16:49:28 -0800789 ${valid_onu_states}= Create List stopping-openomci omci-flows-deleted
Hardik Windlassaaea3402020-03-10 19:45:45 +0530790 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
791 ... Validate Device ENABLED DISCOVERED
Girish Gowdra3f0fadb2021-11-08 16:49:28 -0800792 ... UNREACHABLE ${src['onu']} onu=True onu_reason=${valid_onu_states}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530793 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000794 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530795 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +0530796 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlassaaea3402020-03-10 19:45:45 +0530797 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
798 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530799 END
800
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000801Delete All Devices and Verify
802 [Documentation] Remove any devices from VOLTHA and ONOS
Hardik Windlassc609eb02022-02-22 11:28:37 +0000803 [Arguments] ${maclearning_enabled}=False
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000804 # Clear devices from VOLTHA
805 Disable Devices In Voltha Root=true
806 Wait Until Keyword Succeeds ${timeout} 2s Test Devices Disabled In Voltha Root=true
807 Delete Devices In Voltha Root=true
808 Wait Until Keyword Succeeds ${timeout} 2s Test Empty Device List
Hardik Windlasse8b99222021-01-25 10:03:14 +0000809 FOR ${I} IN RANGE 0 ${num_olts}
810 ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
Matteo Scandolo71ff08a2021-10-21 17:47:27 -0700811 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlasse8b99222021-01-25 10:03:14 +0000812 ... Validate Deleted Device Cleanup In ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${olt_serial_number}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000813 ... ${maclearning_enabled}
Hardik Windlasse8b99222021-01-25 10:03:14 +0000814 END
Hardik Windlass44abec12021-09-27 07:52:33 +0000815 Wait Until Keyword Succeeds ${timeout} 5s Validate Cleanup In ETCD ${INFRA_NAMESPACE}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000816
817Teardown
818 [Documentation] kills processes and cleans up interfaces on src+dst servers
819 Run Keyword If ${has_dataplane} Clean Up Linux
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000820
821Teardown Suite
822 [Documentation] Clean up device if desired
Andrea Campanella82add372021-11-05 12:01:15 +0100823 Start Logging Setup or Teardown Teardown-${SUITE NAME}
Hardik Windlass81375222021-12-02 10:48:01 +0000824 Run Keyword If ${has_dataplane} Clean Up Linux
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000825 Run Keyword If ${teardown_device} Delete All Devices and Verify
Andrea Campanella1ff03222021-09-10 10:14:21 +0200826 Run Keyword And Continue On Failure Collect Logs
TorstenThieme4e2168e2021-06-22 14:01:47 +0000827 Close All ONOS SSH Connections
Hardik Windlass81375222021-12-02 10:48:01 +0000828 Run Keyword If ${has_dataplane} Clean Up All Nodes
Andrea Campanella82add372021-11-05 12:01:15 +0100829 Stop Logging Setup or Teardown Teardown-${SUITE NAME}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000830
831Delete Device and Verify
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800832 [Arguments] ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000833 [Documentation] Disable -> Delete devices via voltctl and verify its removed
Suchitra Vemuri2fa9bba2020-01-22 17:38:48 -0800834 ${olt_device_id}= Get Device ID From SN ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000835 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800836 ... voltctl -c ${VOLTCTL_CONFIG} device disable ${olt_device_id}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000837 Should Be Equal As Integers ${rc} 0
838 Sleep 5s
839 Wait Until Keyword Succeeds ${timeout} 5s
840 ... Validate OLT Device DISABLED UNKNOWN REACHABLE ${olt_serial_number}
841 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800842 ... voltctl -c ${VOLTCTL_CONFIG} device delete ${olt_device_id}
Hardik Windlassdf5035e2021-01-27 08:34:59 +0000843 Sleep 50s
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000844 Should Be Equal As Integers ${rc} 0
845 Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}
Hardik Windlasse8b99222021-01-25 10:03:14 +0000846 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 15s
847 ... Validate Deleted Device Cleanup In ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000848
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000849Repeat Sanity Test
850 [Documentation] This keyword performs Sanity Test Procedure
851 ... Sanity test performs authentication, dhcp and pings for all the ONUs given for the POD
852 ... This keyword can be used to call in any other tests where sanity check is required
853 ... with wpa reassociation
854 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
855 Set Global Variable ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800856 FOR ${I} IN RANGE 0 ${num_all_onus}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000857 ${src}= Set Variable ${hosts.src[${I}]}
858 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800859 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000860 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800861 # Check ONU port is Enabled in ONOD
862 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000863 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800864 # Verify EAPOL flows are added for the ONU port
865 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700866 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800867 # Verify ONU state in voltha
Suchitra Vemurid1e27fb2020-02-01 16:34:37 -0800868 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri81e4f022020-02-01 13:16:02 -0800869 ... ENABLED ACTIVE REACHABLE
870 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800871 # Perform Authentication
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000872 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
873 ... Validate Authentication After Reassociate
874 ... True ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']}
875 ... ${src['container_type']} ${src['container_name']}
876 Wait Until Keyword Succeeds ${timeout} 2s
David K. Bainbridgec0617c92020-03-05 21:17:19 -0800877 ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000878 Wait Until Keyword Succeeds ${timeout} 2s
TorstenThieme4e2168e2021-06-22 14:01:47 +0000879 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000880 ... volt-add-subscriber-access ${of_id} ${onu_port}
881 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
882 ... Validate DHCP and Ping True True
883 ... ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
884 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
885 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
886 ... ${dst['container_name']}
887 Wait Until Keyword Succeeds ${timeout} 2s Run Keyword And Continue On Failure
David K. Bainbridgec0617c92020-03-05 21:17:19 -0800888 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000889 END
Gayathri.Selvanb6a2b542020-01-24 07:24:23 +0000890
Hardik Windlass41701e82021-01-12 17:44:44 +0000891Disable Enable PON Port Per OLT
892 [Arguments] ${olt_serial_number}
893 [Documentation] This keyword disables and then enables OLT PON port and
894 ... also validate ONUs for each corresponding case
895 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
896 ${olt_pon_port_list}= Retrieve OLT PON Ports ${olt_device_id}
897 ${olt_pon_port_list_len}= Get Length ${olt_pon_port_list}
898 FOR ${INDEX0} IN RANGE 0 ${olt_pon_port_list_len}
899 ${olt_pon_port}= Get From List ${olt_pon_port_list} ${INDEX0}
900 ${olt_peer_list}= Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port}
901 # Disable the OLT PON Port and Validate OLT Device
902 DisableOrEnable OLT PON Port disable ${olt_device_id} ${olt_pon_port}
903 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
904 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
905 ... DISABLED DISCOVERED
906 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
907 ... Validate OLT Device ENABLED ACTIVE REACHABLE
908 ... ${olt_serial_number}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530909 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +0000910 ... Validate ONUs for PON OLT Disable ${olt_serial_number} ${olt_peer_list}
911 # Enable the OLT PON Port back, and check ONU status are back to "ACTIVE"
912 DisableOrEnable OLT PON Port enable ${olt_device_id} ${olt_pon_port}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530913 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +0000914 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
915 ... ENABLED ACTIVE
Hardik Windlass58b23a32022-05-10 11:06:48 +0530916 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +0000917 ... Validate ONUs for PON OLT Enable ${olt_serial_number} ${olt_peer_list}
918 END
919
Hardik Windlass16cdf962020-04-29 15:26:50 +0530920Validate ONUs for PON OLT Disable
Hardik Windlass41701e82021-01-12 17:44:44 +0000921 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530922 [Documentation] This keyword validates that Ping fails for ONUs connected to Disabled OLT PON port
923 ... And Pings succeed for other Active OLT PON port ONUs
924 ... Also it removes subscriber for Disabled OLT PON port ONUs to replicate ATT workflow
Hardik Windlass41701e82021-01-12 17:44:44 +0000925 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530926 ${src}= Set Variable ${hosts.src[${I}]}
927 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +0000928 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200929 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +0000930 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530931 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000932 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530933 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
934 Run Keyword If ${matched}
935 ... Run Keywords
936 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
937 ... Validate Device ENABLED DISCOVERED
Andrea Campanellaa9b59b42021-09-21 16:13:17 +0000938 ... UNREACHABLE ${src['onu']} onu=True onu_reason=omci-flows-deleted
Hardik Windlass58b23a32022-05-10 11:06:48 +0530939 ... AND Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000940 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530941 ... AND Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +0530942 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530943 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
944 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
945 ... ${src['container_name']}
946 # Remove Subscriber Access (To replicate ATT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000947 ... AND Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection
948 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass223a1732021-07-09 05:21:40 +0000949 # Additional Sleep to let subscriber delete process
950 ... AND Sleep 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530951 ... ELSE
952 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +0530953 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530954 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
955 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
956 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530957 END
958
959Validate ONUs for PON OLT Enable
Hardik Windlass41701e82021-01-12 17:44:44 +0000960 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530961 [Documentation] This keyword validates Ping succeeds for all Enabled/Acitve OLT PON ports
962 ... Also performs Auth/subscriberAdd/DHCP/Ping for the ONUs on Re-Enabled OLT PON port
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800963 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530964 ${src}= Set Variable ${hosts.src[${I}]}
965 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +0000966 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200967 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +0000968 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +0000969 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530970 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000971 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530972 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
973 ${wpa_log}= Run Keyword If ${has_dataplane} and ${matched} Catenate SEPARATOR=.
974 ... /tmp/wpa ${src['dp_iface_name']} log
975 Run Keyword If ${matched}
976 ... Run Keywords
977 # Perform Cleanup
978 ... Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
979 # Verify ONU port status
Hardik Windlass58b23a32022-05-10 11:06:48 +0530980 ... AND Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000981 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530982 # Verify EAPOL flows are added for the ONU port
983 ... AND Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700984 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530985 # Verify ONU state in voltha
Hardik Windlass58b23a32022-05-10 11:06:48 +0530986 ... AND Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530987 ... Validate Device ENABLED ACTIVE REACHABLE
988 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
989 # Perform Authentication
990 ... AND Run Keyword If ${has_dataplane}
991 ... Run Keyword And Continue On Failure Validate Authentication True
992 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
993 ... ${src['container_type']} ${src['container_name']} ${wpa_log}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530994 ... AND Wait Until Keyword Succeeds ${timeout} 2
Hardik Windlass16cdf962020-04-29 15:26:50 +0530995 ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530996 ... AND Wait Until Keyword Succeeds ${timeout} 2
TorstenThieme4e2168e2021-06-22 14:01:47 +0000997 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530998 ... volt-add-subscriber-access ${of_id} ${onu_port}
999 # Verify that no pending flows exist for the ONU port
1000 ... AND Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
1001 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
1002 # Verify subscriber access flows are added for the ONU port
Hardik Windlass58b23a32022-05-10 11:06:48 +05301003 ... AND Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301004 ... Verify Subscriber Access Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1005 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['s_tag']}
1006 ... AND Run Keyword If ${has_dataplane}
1007 ... Run Keyword And Continue On Failure Validate DHCP and Ping True
1008 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
1009 ... ${src['ip']} ${src['user']} ${src['pass']}
1010 ... ${src['container_type']} ${src['container_name']}
1011 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1012 ... ${dst['container_type']} ${dst['container_name']}
Hardik Windlass58b23a32022-05-10 11:06:48 +05301013 ... AND Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301014 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
1015 ... AND Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
1016 ... ELSE
1017 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +05301018 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301019 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1020 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1021 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301022 END
1023
Hardik Windlass41701e82021-01-12 17:44:44 +00001024Disable Enable PON Port Per OLT DT
1025 [Arguments] ${olt_serial_number}
1026 [Documentation] This keyword disables and then enables OLT PON port and
1027 ... also validate ONUs for each corresponding case
1028 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1029 ${olt_pon_port_list}= Retrieve OLT PON Ports ${olt_device_id}
1030 ${olt_pon_port_list_len}= Get Length ${olt_pon_port_list}
1031 FOR ${INDEX0} IN RANGE 0 ${olt_pon_port_list_len}
1032 ${olt_pon_port}= Get From List ${olt_pon_port_list} ${INDEX0}
1033 ${olt_peer_list}= Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port}
TorstenThieme17d6fd22021-09-23 10:00:08 +00001034 ${olt_peer_list_len}= Get Length ${olt_peer_list}
Hardik Windlass41701e82021-01-12 17:44:44 +00001035 # Disable the OLT PON Port and Validate OLT Device
1036 DisableOrEnable OLT PON Port disable ${olt_device_id} ${olt_pon_port}
1037 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1038 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
1039 ... DISABLED DISCOVERED
1040 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1041 ... Validate OLT Device ENABLED ACTIVE REACHABLE
1042 ... ${olt_serial_number}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001043 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +00001044 ... Validate ONUs for PON OLT Disable DT ${olt_serial_number} ${olt_peer_list}
Hardik Windlass41701e82021-01-12 17:44:44 +00001045 # Enable the OLT PON Port back, and check ONU status are back to "ACTIVE"
1046 DisableOrEnable OLT PON Port enable ${olt_device_id} ${olt_pon_port}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001047 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +00001048 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
1049 ... ENABLED ACTIVE
TorstenThieme17d6fd22021-09-23 10:00:08 +00001050 ${olt_peer_list_new}= Wait Until Keyword Succeeds ${timeout} 5s
1051 ... Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port} ${olt_peer_list_len}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001052 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +00001053 ... Validate ONUs for PON OLT Enable DT ${olt_serial_number} ${olt_peer_list_new}
1054 END
1055
Hardik Windlass16cdf962020-04-29 15:26:50 +05301056Validate ONUs for PON OLT Disable DT
Hardik Windlass41701e82021-01-12 17:44:44 +00001057 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301058 [Documentation] This keyword validates that Ping fails for ONUs connected to Disabled OLT PON port
1059 ... And Pings succeed for other Active OLT PON port ONUs
1060 ... Also it removes subscriber and deletes ONUs for Disabled OLT PON port to replicate DT workflow
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001061 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301062 ${src}= Set Variable ${hosts.src[${I}]}
1063 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +00001064 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001065 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +00001066 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301067 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +00001068 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301069 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
Girish Gowdra3f0fadb2021-11-08 16:49:28 -08001070 ${valid_onu_states}= Create List stopping-openomci omci-flows-deleted
Hardik Windlass16cdf962020-04-29 15:26:50 +05301071 Run Keyword If ${matched}
1072 ... Run Keywords
1073 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1074 ... Validate Device ENABLED DISCOVERED
Girish Gowdra3f0fadb2021-11-08 16:49:28 -08001075 ... UNREACHABLE ${src['onu']} onu=True onu_reason=${valid_onu_states}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001076 ... AND Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +00001077 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301078 ... AND Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001079 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301080 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1081 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1082 ... ${src['container_name']}
1083 # Remove Subscriber Access (To replicate DT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +00001084 ... AND Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection
1085 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301086 # Delete ONU Device (To replicate DT workflow)
1087 ... AND Delete Device ${onu_device_id}
Hardik Windlass223a1732021-07-09 05:21:40 +00001088 # Additional Sleep to let subscriber and ONU delete process
1089 ... AND Sleep 10s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301090 ... ELSE
1091 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001092 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301093 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1094 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1095 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301096 END
1097
1098Validate ONUs for PON OLT Enable DT
Hardik Windlass41701e82021-01-12 17:44:44 +00001099 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301100 [Documentation] This keyword validates Ping succeeds for all Enabled/Acitve OLT PON ports
1101 ... Also performs subscriberAdd/DHCP/Ping for the ONUs on Re-Enabled OLT PON port
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001102 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301103 ${src}= Set Variable ${hosts.src[${I}]}
1104 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +00001105 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001106 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +00001107 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +00001108 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301109 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +00001110 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301111 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
1112 Run Keyword If ${matched}
1113 ... Run Keywords
1114 # Perform Cleanup
1115 ... Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
1116 # Verify ONU port status
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001117 ... AND Wait Until Keyword Succeeds 120s 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +00001118 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001119 ... AND Wait Until Keyword Succeeds ${timeout} 2
TorstenThieme4e2168e2021-06-22 14:01:47 +00001120 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301121 ... volt-add-subscriber-access ${of_id} ${onu_port}
1122 # Verify ONU state in voltha
1123 ... AND Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1124 ... Validate Device ENABLED ACTIVE REACHABLE
1125 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
1126 # Verify subscriber access flows are added for the ONU port
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001127 ... AND Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301128 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1129 ... ${onu_port} ${nni_port} ${src['s_tag']}
1130 ... AND Run Keyword If ${has_dataplane}
1131 ... Run Keyword And Continue On Failure Validate DHCP and Ping True
1132 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
1133 ... ${src['ip']} ${src['user']} ${src['pass']}
1134 ... ${src['container_type']} ${src['container_name']}
1135 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1136 ... ${dst['container_type']} ${dst['container_name']}
1137 ... ELSE
1138 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001139 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301140 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1141 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1142 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301143 END
1144
1145Match ONU in PON OLT Peer List
1146 [Arguments] ${olt_peer_list} ${onu_device_id}
1147 [Documentation] This keyword matches if ONU device is present in OLT PON port peer list
1148 ${matched}= Set Variable False
1149 FOR ${olt_peer} IN @{olt_peer_list}
1150 ${matched}= Set Variable If '${onu_device_id}' == '${olt_peer}' True False
1151 Exit For Loop If ${matched}
1152 END
1153 [Return] ${matched}
1154
Gayathri.Selvanb6a2b542020-01-24 07:24:23 +00001155Collect Logs
1156 [Documentation] Collect Logs from voltha and onos cli for various commands
1157 Run Keyword and Ignore Error Get Device List from Voltha
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001158 FOR ${I} IN RANGE 0 ${num_olts}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001159 Run Keyword and Ignore Error Get Device Output from Voltha ${olt_ids}[${I}][device_id]
1160 Run Keyword and Ignore Error Get Logical Device Output from Voltha ${olt_ids}[${I}][logical_id]
1161 END
1162 #Run Keyword and Ignore Error Get Device Output from Voltha ${olt_device_id}
1163 #Run Keyword and Ignore Error Get Logical Device Output from Voltha ${logical_id}
ubuntu6b6e7d42020-03-02 12:35:42 -08001164 Get ONOS Status ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001165
Hardik Windlassb75cf1b2021-01-18 06:59:09 +00001166Verify ping is successful except for given device
1167 [Arguments] ${num_onus} ${exceptional_onu}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001168 [Documentation] Checks that ping for all the devices are successful except the given ONU.
1169 ${pingStatus} Set Variable True
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001170 FOR ${I} IN RANGE 0 ${num_all_onus}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001171 ${src}= Set Variable ${hosts.src[${I}]}
1172 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +00001173 ${pingStatus} Run Keyword If '${src['onu']}' == '${exceptional_onu}' Set Variable False
Suchitra Vemuri69bcad22020-12-09 11:11:14 -08001174 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
1175 ... Wait Until Keyword Succeeds 60s 2s
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001176 ... Check Ping ${pingStatus} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1177 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1178 END
Andy Bavier4a8450e2020-02-04 08:58:37 -07001179
Suchitra Vemurife309412020-12-01 19:19:52 -08001180Verify ping is successful for ONUs not on this OLT
1181 [Arguments] ${num_all_onus} ${exceptional_olt_id}
1182 [Documentation] Checks that pings work for all the ONUs except for the ONUs on the given OLT.
1183 #${pingStatus} Set Variable True
1184 FOR ${I} IN RANGE 0 ${num_all_onus}
1185 ${src}= Set Variable ${hosts.src[${I}]}
1186 ${dst}= Set Variable ${hosts.dst[${I}]}
1187 ${olt_device_id}= Get Device ID From SN ${src['olt']}
1188 Continue For Loop If "${olt_device_id}"=="${exceptional_olt_id}"
1189 #${pingStatus} Run Keyword If '${olt_device_id}' == '${exceptional_olt_id}' Set Variable False
Suchitra Vemuri69bcad22020-12-09 11:11:14 -08001190 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
1191 ... Wait Until Keyword Succeeds 60s 2s
Suchitra Vemurife309412020-12-01 19:19:52 -08001192 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1193 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1194 END
1195
Andy Bavier1923ecc2020-06-18 14:06:40 -07001196Echo Message to OLT Logs
1197 [Arguments] ${message}
1198 [Documentation] Echoes ${message} into the OLT logs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001199 FOR ${I} IN RANGE 0 ${num_olts}
1200 ${olt_user} Evaluate ${olts}[${I}].get("user")
1201 ${olt_pass} Evaluate ${olts}[${I}].get("pass")
1202 ${olt_ssh_ip} Evaluate ${olts}[${I}].get("sship")
TorstenThieme10bddb42022-05-02 12:28:00 +00001203 ${olt_type} Evaluate ${olts}[${I}].get("type")
Andrea Campanellaebf6f0d2021-01-12 13:10:29 +01001204 Continue For Loop If "${olt_user}" == "${None}"
1205 Continue For Loop If "${olt_pass}" == "${None}"
TorstenThieme10bddb42022-05-02 12:28:00 +00001206 ${command_timeout}= Set Variable If "${olt_type}"=="adtranolt" 300s 180s
1207 Wait Until Keyword Succeeds ${command_timeout} 10s Execute Remote Command
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001208 ... printf '%s\n' '' '' '${message}' '' >> /var/log/openolt.log
1209 ... ${olt_ssh_ip} ${olt_user} ${olt_pass}
TorstenThieme10bddb42022-05-02 12:28:00 +00001210 Wait Until Keyword Succeeds ${command_timeout} 10s Execute Remote Command
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001211 ... printf '%s\n' '' '' '${message}' '' >> /var/log/dev_mgmt_daemon.log
1212 ... ${olt_ssh_ip} ${olt_user} ${olt_pass}
TorstenThieme10bddb42022-05-02 12:28:00 +00001213 Wait Until Keyword Succeeds ${command_timeout} 10s Execute Remote Command
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001214 ... printf '%s\n' '' '' '${message}' '' >> /var/log/openolt_process_watchdog.log
1215 ... ${olt_ssh_ip} ${olt_user} ${olt_pass}
1216 END
Andy Bavier1923ecc2020-06-18 14:06:40 -07001217
Andy Bavierabeba262020-02-07 16:22:16 -07001218Start Logging
1219 [Arguments] ${label}
1220 [Documentation] Start logging for test ${label}
Hardik Windlass9e3db232021-10-14 07:10:47 +00001221 ${kail_process}= Run Keyword If "${container_log_dir}" != "${None}" Start Process kail -n ${NAMESPACE}
Hardik Windlassa9a896a2021-11-23 04:31:51 +00001222 ... -n ${INFRA_NAMESPACE} cwd=${container_log_dir} stdout=${label}-combined.log
Andy Bavierabeba262020-02-07 16:22:16 -07001223 Set Test Variable ${kail_process}
Andy Bavier1923ecc2020-06-18 14:06:40 -07001224 Run Keyword If ${has_dataplane} Echo Message to OLT Logs START ${label}
Andy Bavierabeba262020-02-07 16:22:16 -07001225
Andrea Campanella82add372021-11-05 12:01:15 +01001226Start Logging Setup or Teardown
1227 [Arguments] ${label}
1228 [Documentation] Start logging for suite ${label}
Matteo Scandolo6a90bda2021-11-30 11:31:38 -08001229 ${file}= Replace String ${label} ${SPACE} -
Andrea Campanella82add372021-11-05 12:01:15 +01001230 ${kail_process}= Run Keyword If "${container_log_dir}" != "${None}" Start Process kail -n ${NAMESPACE}
Matteo Scandolo6a90bda2021-11-30 11:31:38 -08001231 ... -n ${INFRA_NAMESPACE} cwd=${container_log_dir} stdout=${file}-combined.log
Andrea Campanella82add372021-11-05 12:01:15 +01001232 Set Suite Variable ${kail_process}
1233 Run Keyword If ${has_dataplane} Echo Message to OLT Logs START ${label}
1234
1235Stop Logging Setup or Teardown
1236 [Arguments] ${label}
1237 [Documentation] End logging for suite;
1238 Run sync
1239 Run Keyword If ${kail_process} Terminate Process ${kail_process}
1240 ${test_logfile}= Run Keyword If "${container_log_dir}" != "${None}"
1241 ... Join Path ${container_log_dir} ${label}-combined.log
1242 Run Keyword If ${has_dataplane} Echo Message to OLT Logs END ${label}
1243
Andy Bavierabeba262020-02-07 16:22:16 -07001244Stop Logging
1245 [Arguments] ${label}
Matteo Scandoloda1c64b2021-07-20 10:14:49 -07001246 [Documentation] End logging for test; remove logfile if test passed and ${logging} is set to False
Andy Bavierabeba262020-02-07 16:22:16 -07001247 Run sync
1248 Run Keyword If ${kail_process} Terminate Process ${kail_process}
1249 ${test_logfile}= Run Keyword If "${container_log_dir}" != "${None}"
1250 ... Join Path ${container_log_dir} ${label}-combined.log
Matteo Scandoloda1c64b2021-07-20 10:14:49 -07001251 Run Keyword If Test Passed
1252 ... Run Keyword If "${logging}" == "False"
1253 ... Run Keyword If "${test_logfile}" != "${None}"
1254 ... Remove File ${test_logfile}
Andy Bavier1923ecc2020-06-18 14:06:40 -07001255 Run Keyword If ${has_dataplane} Echo Message to OLT Logs END ${label}
Andy Bavierabeba262020-02-07 16:22:16 -07001256
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001257Clean Up Linux
1258 [Documentation] Kill processes and clean up interfaces on src+dst servers
Hardik Windlass16cdf962020-04-29 15:26:50 +05301259 [Arguments] ${onu_id}=${EMPTY}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001260 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001261 ${src}= Set Variable ${hosts.src[${I}]}
1262 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301263 ${onu_device_id}= Get Device ID From SN ${src['onu']}
1264 Continue For Loop If '${onu_id}' != '${EMPTY}' and '${onu_id}' != '${onu_device_id}'
Andy Bavier84b83282020-06-30 05:47:49 -07001265 Execute Remote Command sudo pkill wpa_supplicant ${src['ip']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001266 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andy Bavier84b83282020-06-30 05:47:49 -07001267 Execute Remote Command sudo pkill dhclient ${src['ip']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001268 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andy Baviereff938d2020-06-29 18:27:49 -07001269 Execute Remote Command sudo pkill mausezahn ${src['ip']}
1270 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1271 Run Keyword If '${dst['ip']}' != '${None}' Execute Remote Command pkill dhcpd
1272 ... ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001273 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
1274 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1275 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
1276 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1277 ... ${dst['container_type']} ${dst['container_name']}
Andy Bavier84b83282020-06-30 05:47:49 -07001278 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
1279 ${bng_user}= Get Variable Value ${dst['noroot_user']}
1280 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
Andy Bavierf4b7d1d2020-06-30 11:14:04 -07001281 Run Keyword If "${bng_ip}" != "${NONE}" and "${bng_user}" != "${NONE}" and "${bng_pass}" != "${NONE}"
1282 ... Execute Remote Command sudo pkill mausezahn ${bng_ip} ${bng_user} ${bng_pass}
Andy Baviereff938d2020-06-29 18:27:49 -07001283 ... ${dst['container_type']} ${dst['container_name']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001284 END
Scott Baker60e570d2020-02-02 22:10:13 -08001285
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001286Clean Up Linux Per OLT
1287 [Documentation] Kill processes and clean up interfaces on src+dst servers
1288 [Arguments] ${olt_serial_number}
1289 FOR ${I} IN RANGE 0 ${num_all_onus}
1290 ${src}= Set Variable ${hosts.src[${I}]}
1291 ${dst}= Set Variable ${hosts.dst[${I}]}
1292 ${onu_device_id}= Get Device ID From SN ${src['onu']}
1293 ${sn}= Get Device ID From SN ${src['olt']}
1294 #Continue For Loop If '${onu_id}' != '${EMPTY}' and '${onu_id}' != '${onu_device_id}'
1295 Continue For Loop If '${olt_serial_number}' == '${sn}'
1296 Execute Remote Command sudo pkill wpa_supplicant ${src['ip']}
1297 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1298 Execute Remote Command sudo pkill dhclient ${src['ip']}
1299 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1300 Execute Remote Command sudo pkill mausezahn ${src['ip']}
1301 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1302 Run Keyword If '${dst['ip']}' != '${None}' Execute Remote Command pkill dhcpd
1303 ... ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
1304 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
1305 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1306 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
1307 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1308 ... ${dst['container_type']} ${dst['container_name']}
1309 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
1310 ${bng_user}= Get Variable Value ${dst['noroot_user']}
1311 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
1312 Run Keyword If "${bng_ip}" != "${NONE}" and "${bng_user}" != "${NONE}" and "${bng_pass}" != "${NONE}"
1313 ... Execute Remote Command sudo pkill mausezahn ${bng_ip} ${bng_user} ${bng_pass}
1314 ... ${dst['container_type']} ${dst['container_name']}
1315 END
1316
Suchitra Vemuri8d3b0032020-09-11 17:49:08 -07001317Clean dhclient
1318 [Documentation] Kills dhclient processes only for all RGs
Hardik Windlass41701e82021-01-12 17:44:44 +00001319 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri8d3b0032020-09-11 17:49:08 -07001320 ${src}= Set Variable ${hosts.src[${I}]}
1321 ${dst}= Set Variable ${hosts.dst[${I}]}
1322 Execute Remote Command sudo pkill dhclient ${src['ip']}
1323 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1324 END
1325
Suchitra Vemurif7a033c2020-02-26 17:22:41 -08001326Clean WPA Process
1327 [Documentation] Kills wpa_supplicant processes only for all RGs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001328 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemurif7a033c2020-02-26 17:22:41 -08001329 ${src}= Set Variable ${hosts.src[${I}]}
1330 ${dst}= Set Variable ${hosts.dst[${I}]}
1331 Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src['ip']}
1332 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1333 END
1334
Scott Baker60e570d2020-02-02 22:10:13 -08001335Should Be Larger Than
1336 [Documentation] Verify that value_1 is > value_2
1337 [Arguments] ${value_1} ${value_2}
1338 Run Keyword If ${value_1} <= ${value_2}
1339 ... Fail The value ${value_1} is not larger than ${value_2}
1340
Scott Bakeree675552020-02-11 10:43:34 -08001341Should Be Larger Than Or Equal To
1342 [Documentation] Verify that value_1 is >= value_2
1343 [Arguments] ${value_1} ${value_2}
1344 Run Keyword If ${value_1} < ${value_2}
1345 ... Fail The value ${value_1} is not larger than or equal to ${value_2}
1346
Huseyin Ahmet AYDIN175d1582021-11-23 14:51:41 +00001347Should Be Lower Than
1348 [Documentation] Verify that value_1 is < value_2
1349 [Arguments] ${value_1} ${value_2}
1350 Run Keyword If ${value_1} >= ${value_2}
1351 ... Fail The value ${value_1} is not lower than ${value_2}
1352
Scott Baker60e570d2020-02-02 22:10:13 -08001353Should Be Float
1354 [Documentation] Verify that value is a floating point number type
1355 [Arguments] ${value}
1356 ${type} Evaluate type(${value}).__name__
1357 Should Be Equal ${type} float
1358
Scott Bakeree675552020-02-11 10:43:34 -08001359Should Be Newer Than Or Equal To
1360 [Documentation] Compare two RFC3339 dates
1361 [Arguments] ${value_1} ${value_2}
1362 ${unix_v1} Parse RFC3339 ${value_1}
1363 ${unix_v2} Parse RFC3339 ${value_2}
1364 Run Keyword If ${unix_v1} < ${unix_v2}
1365 ... Fail The value ${value_1} is not newer than or equal to ${value_2}
1366
Scott Baker60e570d2020-02-02 22:10:13 -08001367Get Current Time
1368 [Documentation] Return the current time in RFC3339 format
1369 ${output}= Run date -u +"%FT%T%:z"
1370 [return] ${output}
Scott Bakeree675552020-02-11 10:43:34 -08001371
1372Parse RFC3339
1373 [Documentation] Parse an RFC3339 timestamp
1374 [Arguments] ${dateStr}
1375 ${rc} ${output}= Run and Return Rc and Output date --date="${dateStr}" "+%s"
1376 Should Be Equal As Numbers ${rc} 0
1377 [return] ${output}
Matteo Scandolo142e6272020-04-29 17:36:59 -07001378
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001379Get Bandwidth Profile Name For Given Subscriber
Hardik Windlass35db2aa2021-06-03 12:41:26 +00001380 [Arguments] ${subscriber_id} ${stream_type}=upstreamBandwidthProfile ${service_type}=${EMPTY}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001381 [Documentation] Keyword to get the bandwidth details of the given subscriber
Hardik Windlass35db2aa2021-06-03 12:41:26 +00001382 ${service_type_upper}= Run Keyword If '${service_type}' != '${EMPTY}'
1383 ... Convert To Upper Case ${service_type}
1384 ${bandwidth_profile_output}= Run Keyword If '${service_type}' != '${EMPTY}'
TorstenThieme4e2168e2021-06-22 14:01:47 +00001385 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass1189a642021-06-04 03:25:23 +00001386 ... volt-programmed-subscribers | grep ${subscriber_id} | grep '${service_type_upper}' --color=never
Hardik Windlass35db2aa2021-06-03 12:41:26 +00001387 ... ELSE
TorstenThieme4e2168e2021-06-22 14:01:47 +00001388 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001389 ... volt-programmed-subscribers | grep ${subscriber_id}
1390 @{bandwidth_profile_array}= Split String ${bandwidth_profile_output} ,
1391 Log ${bandwidth_profile_array}
1392 FOR ${value} IN @{bandwidth_profile_array}
1393 @{row_value}= Split String ${value} =
1394 ${bandwidth_profile_name}= Set Variable If '${row_value[0]}' == ' ${stream_type}'
1395 ... ${row_value[1]}
1396 ${bandwidth_profile_name}= Convert To String ${bandwidth_profile_name}
1397 Run Keyword If "${bandwidth_profile_name}" != "None" Exit For Loop
1398 END
1399 Log ${bandwidth_profile_name}
1400 [Return] ${bandwidth_profile_name}
1401
1402Execute Remote Command
1403 [Documentation] SSH into a remote host and execute a command on the bare host or in a container.
1404 ... This replaces and simplifies the Login And Run Command On Remote System keyword in CORDRobot.
1405 [Arguments] ${cmd} ${ip} ${user} ${pass}=${None}
Andy Baviereff938d2020-06-29 18:27:49 -07001406 ... ${container_type}=${None} ${container_name}=${None} ${timeout}=${None}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001407 ${conn_id}= SSHLibrary.Open Connection ${ip}
1408 Run Keyword If '${pass}' != '${None}'
1409 ... SSHLibrary.Login ${user} ${pass}
1410 ... ELSE
1411 ... SSHLibrary.Login With Public Key ${user} %{HOME}/.ssh/id_rsa
1412 ${namespace}= Run Keyword If '${container_type}' == 'K8S' SSHLibrary.Execute Command
1413 ... kubectl get pods --all-namespaces | grep ${container_name} | awk '{print $1}'
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001414 ${stdout} ${stderr} ${rc}= Run Keyword If '${container_type}' == 'LXC'
1415 ... SSHLibrary.Execute Command lxc exec ${container_name} -- ${cmd}
Andy Baviereff938d2020-06-29 18:27:49 -07001416 ... return_stderr=True return_rc=True timeout=${timeout}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001417 ... ELSE IF '${container_type}' == 'K8S'
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001418 ... SSHLibrary.Execute Command kubectl -n ${namespace} exec ${container_name} -- ${cmd}
Andy Baviereff938d2020-06-29 18:27:49 -07001419 ... return_stderr=True return_rc=True timeout=${timeout}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001420 ... ELSE
Andy Baviereff938d2020-06-29 18:27:49 -07001421 ... SSHLibrary.Execute Command ${cmd} return_stderr=True return_rc=True timeout=${timeout}
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001422
1423 Log ${stdout}
1424 Log ${stderr}
1425 Log ${rc}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001426 SSHLibrary.Close Connection
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001427 [Return] ${stdout} ${stderr} ${rc}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001428
Suraj Gour33651272020-05-04 10:10:16 +05301429Start Remote Command
1430 [Documentation] SSH into a remote host and execute a command on the bare host or in a container.
1431 ... This replaces and simplifies the Login And Run Command On Remote System keyword in CORDRobot.
1432 [Arguments] ${cmd} ${ip} ${user} ${pass}=${None}
1433 ... ${container_type}=${None} ${container_name}=${None}
1434 ${conn_id}= SSHLibrary.Open Connection ${ip}
1435 Run Keyword If '${pass}' != '${None}'
1436 ... SSHLibrary.Login ${user} ${pass}
1437 ... ELSE
1438 ... SSHLibrary.Login With Public Key ${user} %{HOME}/.ssh/id_rsa
1439 ${namespace}= Run Keyword If '${container_type}' == 'K8S' SSHLibrary.Execute Command
1440 ... kubectl get pods --all-namespaces | grep ${container_name} | awk '{print $1}'
1441 Run Keyword If '${container_type}' == 'LXC'
1442 ... SSHLibrary.Start Command lxc exec ${container_name} -- ${cmd}
1443 ... ELSE IF '${container_type}' == 'K8S'
1444 ... SSHLibrary.Start Command kubectl -n ${namespace} exec ${container_name} -- ${cmd}
1445 ... ELSE
1446 ... SSHLibrary.Start Command ${cmd}
Andy Bavier9fb23232020-06-30 15:12:20 -07001447 # It seems that closing the connection immediately will sometimes kill the command
1448 Sleep 1s
Suraj Gour33651272020-05-04 10:10:16 +05301449 SSHLibrary.Close Connection
1450
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001451Run Iperf3 Test Client
1452 [Arguments] ${src} ${server} ${args}
1453 [Documentation] Login to ${src} and run the iperf3 client against ${server} using ${args}.
1454 ... Return a Dictionary containing the results of the test.
Girish Gowdrad769b412021-05-16 11:09:46 -07001455 ${output} ${stderr} ${rc}= Execute Remote Command iperf3 -J -c ${server} ${args} -l 1024 -M 1350 | jq -M -c '.'
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001456 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001457 Should Be Equal As Integers ${rc} 0
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001458 ${object}= Evaluate json.loads(r'''${output}''') json
1459 [Return] ${object}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001460
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -07001461Run Iperf Test Client for MCAST
1462 [Arguments] ${src} ${server} ${args}
1463 [Documentation] Login to ${src} and run the iperf client against ${server} using ${args}.
1464 ... Return a Dictionary containing the results of the test.
1465 ${output} ${stderr} ${rc}= Execute Remote Command sudo iperf -c ${server} ${args} | jq -M -c '.'
1466 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1467 Should Be Equal As Integers ${rc} 0
1468 ${object}= Evaluate json.loads(r'''${output}''') json
1469 [Return] ${object}
1470
Hardik Windlassd19af862021-08-12 11:40:20 +00001471Run Ping In Background
1472 [Arguments] ${output_file} ${dst_ip} ${iface} ${ip} ${user} ${pass}=${None}
1473 ... ${container_type}=${None} ${container_name}=${None}
1474 [Documentation] Runs the 'ping' on remote system in background and stores the result in a file
1475 ${result}= Login And Run Command On Remote System
Hardik Windlass4e0e7c12021-08-26 08:07:35 +00001476 ... echo "ping -I ${iface} ${dst_ip} > ${output_file} &" > ping.sh; chmod +x ping.sh; ./ping.sh
Hardik Windlassd19af862021-08-12 11:40:20 +00001477 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
1478 Log ${result}
1479
1480Stop Ping Running In Background
1481 [Arguments] ${ip} ${user} ${pass}=${None}
1482 ... ${container_type}=${None} ${container_name}=${None}
1483 [Documentation] Stops the 'ping' running in background on remote system
Hardik Windlassa04efa52021-08-13 08:17:24 +00001484 ${cmd}= Run Keyword If '${container_type}' == 'LXC' or '${container_type}' == 'K8S'
1485 ... Set Variable kill -SIGINT `pgrep ping`
1486 ... ELSE
1487 ... Set Variable sudo kill -SIGINT `pgrep ping`
Hardik Windlassd19af862021-08-12 11:40:20 +00001488 ${result}= Login And Run Command On Remote System
Hardik Windlassa04efa52021-08-13 08:17:24 +00001489 ... ${cmd} ${ip} ${user} ${pass} ${container_type} ${container_name}
Hardik Windlassd19af862021-08-12 11:40:20 +00001490 Log ${result}
1491
1492Retrieve Remote File Contents
1493 [Documentation] Retrieves the contents of the file on remote system
1494 [Arguments] ${file} ${ip} ${user} ${pass}=${None}
1495 ... ${container_type}=${None} ${container_name}=${None} ${prompt}=~$
1496 ${output}= Login And Run Command On Remote System
1497 ... cat ${file}
1498 ... ${ip} ${user} ${pass} ${container_type} ${container_name} ${prompt}
1499 [Return] ${output}
1500
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001501RestoreONUs
1502 [Documentation] Restore all connected ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001503 [Arguments] ${num_all_onus}
1504 FOR ${I} IN RANGE 0 ${num_all_onus}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001505 ${src}= Set Variable ${hosts.src[${I}]}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001506 ${container_type}= Get Variable Value ${src['container_type']} "null"
1507 ${container_name}= Get Variable Value ${src['container_name']} "null"
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001508 ${onu_type}= Get Variable Value ${src['onu_type']} "null"
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001509 #Get ens6f0 from ens6f0.22
1510 ${if_name}= Replace String Using Regexp ${src['dp_iface_name']} \\..* \
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001511 Run Keyword IF '${onu_type}' == 'alpha' AlphaONURestoreDefault ${src['ip']} ${src['user']}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001512 ... ${src['pass']} ${if_name} admin admin ${container_type} ${container_name}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001513 END
1514
1515AlphaONURestoreDefault
1516 [Documentation] Restore the Alpha ONU to factory setting
1517 [Arguments] ${rg_ip} ${rg_user} ${rg_pass} ${onu_ifname}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001518 ... ${onu_user} ${onu_pass} ${container_type}=${None} ${container_name}=${None}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001519 ${output}= Login And Run Command On Remote System sudo ifconfig ${onu_ifname} 192.168.1.3/24
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001520 ... ${rg_ip} ${rg_user} ${rg_pass} ${container_type} ${container_name}
TorstenThieme70bc5262021-01-19 12:12:55 +00001521 ${cmd} Catenate
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001522 ... (echo open "192.168.1.1"; sleep 1;
1523 ... echo "${onu_user}"; sleep 1;
1524 ... echo "${onu_pass}"; sleep 1;
1525 ... echo "restoredefault"; sleep 1) | telnet
1526 ${output}= Login And Run Command On Remote System ${cmd}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001527 ... ${rg_ip} ${rg_user} ${rg_pass} ${container_type} ${container_name}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001528 Log To Console ${output}
1529 ${output}= Login And Run Command On Remote System sudo ifconfig ${onu_ifname} 0
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001530 ... ${rg_ip} ${rg_user} ${rg_pass} ${container_type} ${container_name}
Suraj Gour33651272020-05-04 10:10:16 +05301531
1532Create traffic with each pbit and capture at other end
1533 [Documentation] Generates upstream traffic using Mausezahn tool
1534 ... with each pbit and validates reception at other end using tcpdump
1535 [Arguments] ${target_ip} ${target_iface} ${src_iface}
Girish Gowdra66cd95d2021-07-08 10:31:54 -07001536 ... ${packet_count} ${packet_type} ${c_vlan} ${s_vlan} ${direction} ${tcpdump_filter}
Suraj Gour33651272020-05-04 10:10:16 +05301537 ... ${dst_ip} ${dst_user} ${dst_pass} ${dst_container_type} ${dst_container_name}
1538 ... ${src_ip} ${src_user} ${src_pass} ${src_container_type} ${src_container_name}
1539 FOR ${pbit} IN RANGE 8
Andy Baviereff938d2020-06-29 18:27:49 -07001540 Execute Remote Command sudo pkill mausezahn
Suraj Gour33651272020-05-04 10:10:16 +05301541 ... ${src_ip} ${src_user} ${src_pass} ${src_container_type} ${src_container_name}
Girish Gowdrabbfbbc32021-05-17 14:36:58 -07001542 ${var1}= Set Variable sudo mausezahn ${src_iface} -B ${target_ip} -c ${packet_count}
Girish Gowdra66cd95d2021-07-08 10:31:54 -07001543 ${var2}= Run Keyword If "${direction}"=="downstream"
1544 ... Set Variable -t ${packet_type} "dp=80, flags=rst, p=aa:aa:aa" -Q ${pbit}:${s_vlan},${pbit}:${c_vlan}
1545 ... ELSE
1546 ... Set Variable -t ${packet_type} "dp=80, flags=rst, p=aa:aa:aa" -Q ${pbit}:${c_vlan}
Suraj Gour33651272020-05-04 10:10:16 +05301547 ${cmd}= Set Variable ${var1} ${var2}
1548 Start Remote Command ${cmd} ${src_ip} ${src_user} ${src_pass}
1549 ... ${src_container_type} ${src_container_name}
1550 ${output} ${stderr} ${rc}= Execute Remote Command
Andy Baviereff938d2020-06-29 18:27:49 -07001551 ... sudo tcpdump -l -U -c 30 -i ${target_iface} -e ${tcpdump_filter}
Suraj Gour33651272020-05-04 10:10:16 +05301552 ... ${dst_ip} ${dst_user} ${dst_pass} ${dst_container_type} ${dst_container_name}
Andy Baviereff938d2020-06-29 18:27:49 -07001553 ... timeout=30 seconds
1554 Execute Remote Command sudo pkill mausezahn
Suraj Gour33651272020-05-04 10:10:16 +05301555 ... ${src_ip} ${src_user} ${src_pass} ${src_container_type} ${src_container_name}
Girish Gowdrabbfbbc32021-05-17 14:36:58 -07001556 Run Keyword If "${tcpdump_filter}"=="tcp"
Girish Gowdraebeca682021-05-18 14:44:41 -07001557 ... Should Match Regexp ${output} , p ${pbit},
Suraj Gour33651272020-05-04 10:10:16 +05301558 END
TorstenThieme70bc5262021-01-19 12:12:55 +00001559
1560Determine Number Of ONU
1561 [Arguments] ${olt_serial_number}=${EMPTY} ${num_onus}=${num_all_onus}
1562 [Documentation] Determine the number of different ONUs for the given OLT taken from host.src
1563 ${onu_list} Create List
1564 FOR ${INDEX} IN RANGE 0 ${num_onus}
1565 Continue For Loop If "${olt_serial_number}"!="${hosts.src[${INDEX}].olt}" and "${olt_serial_number}"!="${EMPTY}"
1566 ${onu_id}= Get Index From List ${onu_list} ${hosts.src[${INDEX}].onu}
1567 Run Keyword If -1 == ${onu_id} Append To List ${onu_list} ${hosts.src[${INDEX}].onu}
1568 END
1569 ${real_num_onus}= Get Length ${onu_list}
1570 [Return] ${real_num_onus}
Hardik Windlass44abec12021-09-27 07:52:33 +00001571
1572Validate Cleanup In ETCD
1573 [Documentation] The keyword verifies that device, ports, flows, meters are all cleared in ETCD
Andrea Campanella388cd872022-02-10 09:11:39 +01001574 [Arguments] ${namespace}=default ${defaultkvstoreprefix}=voltha/voltha_voltha
Hardik Windlass44abec12021-09-27 07:52:33 +00001575 ${podname}= Set Variable etcd
1576 ${kvstoreprefix}= Get Kv Store Prefix ${defaultkvstoreprefix}
1577 # Log Devices Output and Verify Output Should be Empty
1578 ${commandget}= Catenate
1579 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/devices --keys-only'
1580 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1581 Log ${result}
1582 Should Be Empty ${result} Stale Devices Data in Etcd!
1583 # Log Flows Output and Verify Output Should be Empty
1584 ${commandget}= Catenate
1585 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/flows --keys-only'
1586 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1587 Log ${result}
1588 Should Be Empty ${result} Stale Flows Data in Etcd!
1589 # Log LogicalDevices Output and Verify Output Should be Empty
1590 ${commandget}= Catenate
1591 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_devices --keys-only'
1592 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1593 Log ${result}
1594 Should Be Empty ${result} Stale Logical Devices Data in Etcd!
1595 # Log LogicalFlows Output and Verify Output Should be Empty
1596 ${commandget}= Catenate
1597 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_flows --keys-only'
1598 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1599 Log ${result}
1600 Should Be Empty ${result} Stale Logical Flows Data in Etcd!
1601 # Log LogicalMeters Output and Verify Output Should be Empty
1602 ${commandget}= Catenate
1603 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_meters --keys-only'
1604 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1605 Log ${result}
1606 Should Be Empty ${result} Stale Logical Meters Data in Etcd!
1607 # Log LogicalPorts Output and Verify Output Should be Empty
1608 ${commandget}= Catenate
1609 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_ports --keys-only'
1610 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1611 Log ${result}
1612 Should Be Empty ${result} Stale Logical Ports Data in Etcd!
1613 # Log Openolt Output and Verify Output Should be Empty
1614 ${commandget}= Catenate
1615 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/openolt --keys-only'
1616 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1617 Log ${result}
1618 Should Be Empty ${result} Stale Openolt Data in Etcd!
1619 # Log Openonu Output and Verify Output Should be Empty
1620 ${commandget}= Catenate
1621 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/openonu --keys-only'
1622 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1623 Log ${result}
1624 Should Be Empty ${result} Stale Openonu Data in Etcd!
1625 # Log Ports Output and Verify Output Should be Empty
1626 ${commandget}= Catenate
1627 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/ports --keys-only'
1628 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1629 Log ${result}
1630 Should Be Empty ${result} Stale Ports Data in Etcd!
1631 # Log ResourceInstances Output and Verify Output Should be Empty
1632 ${commandget}= Catenate
1633 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/resource_instances --keys-only'
1634 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1635 Log ${result}
1636 Should Be Empty ${result} Stale Resource Instances Data in Etcd!
1637 # Log ResourceManager Output and Verify Output Should be Empty
1638 ${commandget}= Catenate
1639 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/resource_manager --keys-only'
1640 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1641 Log ${result}
1642 Should Be Empty ${result} Stale Resource Manager Data in Etcd!
Hardik Windlass81375222021-12-02 10:48:01 +00001643
Hardik Windlass81375222021-12-02 10:48:01 +00001644Clean Up All Nodes
1645 [Documentation] Login to each node and kill all stale lxc prcoesses
1646 ${num_nodes}= Get Length ${nodes}
1647 FOR ${I} IN RANGE 0 ${num_nodes}
1648 ${node_ip}= Evaluate ${nodes}[${I}].get("ip")
1649 ${node_user}= Evaluate ${nodes}[${I}].get("user")
1650 ${node_pass}= Evaluate ${nodes}[${I}].get("pass")
1651 Run Keyword And Continue On Failure Start Remote Command kill -9 `pidof lxc`
1652 ... ${node_ip} ${node_user} ${node_pass}
1653 END
Girish Gowdrafc0bdf22021-12-06 16:57:50 +05301654
1655Reboot XGSPON ONU
1656 [Documentation] Reboots the XGSPON ONU and verifies the ONU state after the reboot
1657 [Arguments] ${olt_sn} ${onu_sn} ${reason}
1658 FOR ${I} IN RANGE 0 ${num_olts}
1659 ${serial_number} Evaluate ${olts}[${I}].get("serial")
1660 Continue For Loop If "${serial_number}"!="${olt_sn}"
1661 ${board_tech} Evaluate ${olts}[${I}].get("board_technology")
1662 ${onu_device_id}= Get Device ID From SN ${onu_sn}
1663 Run Keyword If "${board_tech}"=="XGS-PON" Run Keywords
1664 ... Reboot Device ${onu_device_id}
1665 ... AND Wait Until Keyword Succeeds 120s 5s
1666 ... Validate Device ENABLED ACTIVE
1667 ... REACHABLE ${onu_sn} onu=True onu_reason=${reason}
1668 END
Girish Gowdra8fd96962021-12-14 16:20:04 +05301669
1670Set Non-Critical Tag for XGSPON Tech
1671 [Documentation] Dynamically sets the test tag for xgs-pon based to non-critical
1672 FOR ${I} IN RANGE 0 ${num_olts}
1673 ${board_tech} Evaluate ${olts}[${I}].get("board_technology")
1674 Run Keyword If "${board_tech}"=="XGS-PON" Run Keywords
1675 ... Set Tags non-critical
1676 ... AND Exit For Loop
1677 END
Hardik Windlassc4d1fd62022-04-12 13:12:28 +00001678
1679Perform Reboot ONUs and OLTs Physically
1680 [Documentation] This keyword reboots ONUs and OLTs physically
1681 ... It runs only on the PODs that are configured with PowerSwitch that
1682 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
1683 [Arguments] ${power_cycle_olt}=False
1684 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
1685 @{onu_list}= Create List
1686 FOR ${I} IN RANGE 0 ${num_all_onus}
1687 ${src}= Set Variable ${hosts.src[${I}]}
1688 ${dst}= Set Variable ${hosts.dst[${I}]}
1689 # If the power switch port is not specified, continue
1690 Continue For Loop If '${src["power_switch_port"]}' == '${None}'
1691 # Skip if we have already handled this ONU
1692 ${sn}= Set Variable ${src['onu']}
1693 ${onu_id}= Get Index From List ${onu_list} ${sn}
1694 Continue For Loop If -1 != ${onu_id}
1695 Append To List ${onu_list} ${sn}
1696 Disable Switch Outlet ${src['power_switch_port']}
1697 Sleep 10s
1698 Enable Switch Outlet ${src['power_switch_port']}
1699 END
1700 Pass Execution If '${power_cycle_olt}'=='False' Skipping OLT(s) Power Switch Reboot
1701 # Waiting extra time for the ONUs to come up
1702 Sleep 30s
1703 FOR ${I} IN RANGE 0 ${olt_count}
Hardik Windlass2cd43652022-04-21 16:44:06 +05301704 ${olt_serial_number}= Get From Dictionary ${list_olts}[${I}] sn
Hardik Windlassc4d1fd62022-04-12 13:12:28 +00001705 ${power_switch_port}= Get From Dictionary ${list_olts}[${I}] powerswitchport
1706 ${olt_ssh_ip}= Get From Dictionary ${list_olts}[${I}] sship
1707 # If the power switch port is not specified, continue
1708 Continue For Loop If '${power_switch_port}' == '${None}'
1709 Disable Switch Outlet ${power_switch_port}
1710 Sleep 10s
1711 Enable Switch Outlet ${power_switch_port}
1712 Run Keyword If ${has_dataplane} Wait Until Keyword Succeeds 120s 10s
1713 ... Check Remote System Reachability True ${olt_ssh_ip}
1714 END
1715 # Waiting extra time for the ONUs to come up
1716 Sleep 60s
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001717
1718Perform Sanity Test TIM
1719 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for TIM workflow
1720 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
1721 ... In all other (common) cases flag has to be set False (default).
1722 [Arguments] ${supress_add_subscriber}=False ${maclearning_enabled}=False
1723 FOR ${J} IN RANGE 0 ${num_olts}
1724 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
1725 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
1726 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1727 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
1728 ... ${olt_serial_number}
1729 Set Global Variable ${of_id}
1730
1731 #Permorm test on flow rules that are writen inside ONOS, OLT and ONUs
1732 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
1733 Perform Sanity Test TIM Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${num_onus}
1734 ... ${supress_add_subscriber}
1735
1736 #Scalability Test
1737 #Extract the total iphotetical number of UNIs that an OLT controll having multiple ONUs connected
1738 ${num_of_provisioned_onus_ports}= Count Number of UNI ports for OLT
1739 ... ${olt_serial_number} hsia
1740
1741 # Verify ONOS Flows
1742 # Number of Access Flows for OLT on ONOS are equals to:
1743 # a standard downstream flow for the Any VLAN, that flow exist when there are at least 1 onu,
1744 # 4 rules for each single ONU/UNI
1745 # and there are 3 default flows lldp, igmp and pppoe flow rules for the OLT
1746 ${onos_flows_count}= Run Keyword Calculate Tim flows
1747 ... ${num_of_provisioned_onus_ports} 1 true true true true
1748
1749 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1750 ... Verify Subscriber Access Flows Added Count TIM ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1751 ... ${onos_flows_count}
1752
1753 # Verify VOLTHA Flows
1754 # Number of per OLT Flows are 3 times the Number of Active ONUs
1755 # (for downstream and upstream) + 3 on the NNI port the LLDP, IGMP and PPPoE default flows
1756 ${olt_flows}= Evaluate 3 * ${num_of_provisioned_onus_ports} + 3
1757 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
1758 ... ${olt_flows} ${olt_device_id}
1759 ${List_ONU_Serial} Create List
1760 Set Suite Variable ${List_ONU_Serial}
1761 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
1762 Log ${List_ONU_Serial}
1763 # Number of per ONU Flows equals 3
1764 ${onu_flows}= Set Variable 3
1765 Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
1766 ... ${List_ONU_Serial} ${onu_flows}
1767 END
1768
1769Count Number of UNI ports for OLT
1770 [Documentation] Count Provisioned UNI ports, for ONUs connected with specified OLT
1771 [Arguments] ${olt_serial_number} ${type_of_service}
1772 ${num_of_provisioned_onus_ports}= Evaluate 0
1773 FOR ${I} IN RANGE 0 ${num_all_onus}
1774 ${src}= Set Variable ${hosts.src[${I}]}
1775 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
1776 Continue For Loop If "${type_of_service}"!="${src['service_type']}"
1777 ${num_of_provisioned_onus_ports}= Evaluate ${num_of_provisioned_onus_ports} + 1
1778 END
1779 [Return] ${num_of_provisioned_onus_ports}
1780
1781
1782Perform Sanity Test TIM Per OLT
1783 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
1784 [Documentation] This keyword performs Sanity Test Procedure for TIM Workflow
1785 ... Sanity test performs pppoe and flows for all the ONUs (and for each UNIs of a consider ONU)
1786 ... This keyword can be used to call in any other tests where sanity check is required
1787 ... and avoids duplication of code.
1788 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
1789 ... In all other (common) cases flag has to be set False (default).
1790 Wait Until Keyword Succeeds ${timeout} 5s
1791 ... Verify Downstream Flows for Single OLT NNI Port TIM ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1792 ... ${nni_port}
1793
1794 FOR ${I} IN RANGE 0 ${num_all_onus}
1795 ${src}= Set Variable ${hosts.src[${I}]}
1796 ${dst}= Set Variable ${hosts.dst[${I}]}
1797 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001798 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
1799 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlass78bb0fd2022-06-21 15:11:54 +05301800 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001801 # Check ONU port is Enabled in ONOS
1802 Wait Until Keyword Succeeds 120s 2s
1803 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
1804
1805 # Subscribe a RG on a defualt UNI_id=1
1806 ${add_subscriber_access} = Set Variable volt-add-subscriber-access ${of_id} ${onu_port}
1807 Run Keyword If '${supress_add_subscriber}' == 'False'
1808 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${add_subscriber_access}
1809
1810 # Verify ONU state in voltha
1811 ${onu_reasons}= Create List omci-flows-pushed
1812 Run Keyword Append To List ${onu_reasons} onu-reenabled
1813 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
1814 ... ENABLED ACTIVE REACHABLE
1815 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
1816
1817 # Verify subscriber access flows are added for a single ONU puniort
1818 Wait Until Keyword Succeeds ${timeout} 5s
1819 ... Verify Subscriber Access Flows Added For Single ONU Port TIM ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1820 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['uni_tag']}
1821
1822 # TO DO: Verify Meters in ONOS
1823 #Wait Until Keyword Succeeds ${timeout} 5s
1824 #... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
1825 END
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001826
1827Perform Sanity Test of BBFadapter Aggregation
1828 [Documentation] This test verfy if each OLT and ONU viewed by the BBF-Adapter
1829 ... represent the device in Voltha
1830 ... (with the correct translation to and from ietf standard)
1831 [Arguments] ${XML} ${supress_add_subscriber}=False
1832 Log ${supress_add_subscriber}
1833 #Extract from the XML of the Device Aggregation different tipe of data structure
1834 #One for only OLTs, one for only ONUs and one for Both
1835 Set Global Variable ${XML}
1836
1837 ALL DEVICES XML update From BBF ${XML} ${scripts}
1838
1839 OLT XML update From BBF ${XML} ${scripts}
1840
1841 #Do the verification for each OLT and its ONUs
1842 FOR ${J} IN RANGE 0 ${num_olts}
1843 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
1844 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1845 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
1846 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
1847 ... ${olt_serial_number}
1848 Set Global Variable ${of_id} ${olt_device_id}
1849 #Validate in VOLTHA if the OLT exist have the correct states
1850 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
1851 ... ENABLED ACTIVE REACHABLE
1852 ... ${olt_serial_number}
1853 #Validate in BBF if the OLT exist and have the correct states
1854 #State are defined in VOLTHA but internal translate in IETF standard
1855 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1856 ... Validate Olt in BBF ENABLED ACTIVE REACHABLE
1857 ... ${olt_serial_number} ${olt_device_id}
1858 #Verify if the OLT in BBF have all the features present in VOLTHA
1859 #Is like a Viceversa Check
1860 Correct representation check VOLTHA-IETF ${olt_serial_number} False
1861
1862 #NNI_port is a place_holder for future tests on services
1863 #Do a Test for the OLT configuration and its ONUS
1864 ${nni_port}= Set Variable 0
1865 Perform Sanity BBF Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${num_onus}
1866 ... ${supress_add_subscriber}
1867
1868 END
1869
1870Perform Sanity BBF Per OLT
1871 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}
1872 [Documentation] This keyword performs Sanity Test Procedure for BBF on Multiple Workflow
1873 ... This keyword can be used to call in any other tests where sanity check is required
1874 ... and avoids duplication of code.
1875 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
1876 ... In all other (common) cases flag has to be set False (default).
1877 # Test all the ONUs of the consider OLT
1878 FOR ${I} IN RANGE 0 ${num_all_onus}
1879 ${src}= Set Variable ${hosts.src[${I}]}
1880 ${dst}= Set Variable ${hosts.dst[${I}]}
1881 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
1882 ${onu_device_id}= Get Device ID From SN in BBF ${src['onu']}
1883 ${of_id}= Get ofID From OLT List ${src['olt']}
1884 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
1885 ... ${of_id} ${src['uni_id']}
1886 # Subscribe the ONU if not on repete sanity check
1887 Run Keyword If '${supress_add_subscriber}' == 'False' Wait Until Keyword Succeeds ${timeout} 2s
1888 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
1889 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
1890 # Verify ONU state in BBF
1891 ${onu_reasons}= Create List omci-flows-pushed
1892 #Run Keyword If ${supress_add_subscriber} Append To List ${onu_reasons} initial-mib-downloaded
1893 Log ${onu_reasons}
1894 Log ${supress_add_subscriber}
1895
1896 ONU XML update From BBF ${XML} ${scripts}
1897
1898 #Validate in VOLTHA if the ONU exist and have the correct states
1899 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
1900 ... ENABLED ACTIVE REACHABLE
1901 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
1902 #Validate in BBF if the ONU exist have the correct states
1903 #State are defined in VOLTHA but internal translate in IETF standard
1904 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1905 ... Validate Onu in BBF ENABLED ACTIVE REACHABLE
1906 ... ${src['onu']} ${onu_reasons}
1907 #Verify if the ONU in BBF have all the features present in VOLTHA
1908 #Is like a Viceversa Check
1909 Correct representation check VOLTHA-IETF ${src['onu']} True
1910 END
1911