blob: 36a105d9240918ef6de7ab4599360c4af300de23 [file] [log] [blame]
Joey Armstrong9fadcbe2024-01-17 19:00:37 -05001# Copyright 2017-2024 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
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +020028Resource ./bbsim.robot
Kailash92764922019-07-25 08:21:39 -070029
30*** Keywords ***
Kailash528f7c02019-07-31 10:55:49 -070031Check CLI Tools Configured
32 [Documentation] Tests that use 'voltctl' and 'kubectl' should execute this keyword in suite setup
33 # check voltctl and kubectl configured
Matteo Scandolo1eacdd82021-06-28 10:32:19 +020034 ${voltctl_rc} ${voltctl_output}= Run And Return Rc And Output voltctl -c ${VOLTCTL_CONFIG} device list
Hardik Windlass13803172021-04-26 08:17:07 +000035 Log ${voltctl_output}
36 ${kubectl_rc} ${kubectl_output}= Run And Return Rc And Output kubectl get pods
37 Log ${kubectl_output}
Gilles Depatie675a2062019-10-22 12:44:42 -040038 Run Keyword If ${voltctl_rc} != 0 or ${kubectl_rc} != 0 FATAL ERROR
39 ... VOLTCTL and KUBECTL not configured. Please configure before executing tests.
Gilles Depatieb5682f82019-10-31 10:39:45 -040040
41Send File To Onos
Zack Williamsa8fe75a2020-01-10 14:25:27 -070042 [Documentation] Send the content of the file to Onos to selected section of configuration
43 ... using Post Request
Huseyin Ahmet AYDIN42d3b712021-06-10 14:46:17 +000044 [Arguments] ${CONFIG_FILE} ${section}=${EMPTY}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070045 ${Headers}= Create Dictionary Content-Type application/json
46 ${File_Data}= OperatingSystem.Get File ${CONFIG_FILE}
47 Log ${Headers}
48 Log ${File_Data}
49 ${resp}= Post Request ONOS
50 ... /onos/v1/network/configuration/${section} headers=${Headers} data=${File_Data}
Cristina de Franciscoc4cfd7e2023-10-09 10:55:08 +020051 Should Be Equal As Strings ${resp.status_code} 200 Error sending file to ONOS (${resp.status_code})
Andy Bavier88cd9f62019-11-26 16:22:33 -070052
53Common Test Suite Setup
54 [Documentation] Setup the test suite
Cristina de Franciscoc4cfd7e2023-10-09 10:55:08 +020055 Set Global Variable ${KUBECTL_CONFIG} %{KUBECONFIG}
Matteo Scandolo5899be12020-11-11 15:38:07 -080056 Set Global Variable ${VOLTCTL_CONFIG} %{VOLTCONFIG}
Andy Bavier88cd9f62019-11-26 16:22:33 -070057 ${k8s_node_ip}= Evaluate ${nodes}[0].get("ip")
ubuntu6b6e7d42020-03-02 12:35:42 -080058 ${ONOS_REST_IP}= Get Environment Variable ONOS_REST_IP ${k8s_node_ip}
59 ${ONOS_SSH_IP}= Get Environment Variable ONOS_SSH_IP ${k8s_node_ip}
60 Set Global Variable ${ONOS_REST_IP}
61 Set Global Variable ${ONOS_SSH_IP}
Andy Bavier88cd9f62019-11-26 16:22:33 -070062 ${k8s_node_user}= Evaluate ${nodes}[0].get("user")
63 ${k8s_node_pass}= Evaluate ${nodes}[0].get("pass")
64 Check CLI Tools Configured
65 ${onos_auth}= Create List karaf karaf
66 ${HEADERS} Create Dictionary Content-Type=application/json
ubuntu6b6e7d42020-03-02 12:35:42 -080067 Create Session ONOS http://${ONOS_REST_IP}:${ONOS_REST_PORT} auth=${ONOS_AUTH}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080068 ${num_olts} Get Length ${olts}
69 ${list_olts} Create List
Suchitra Vemuriac9785e2021-01-07 16:50:18 -080070 # Create olt list from the configuration file
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080071 FOR ${I} IN RANGE 0 ${num_olts}
72 ${ip} Evaluate ${olts}[${I}].get("ip")
73 ${user} Evaluate ${olts}[${I}].get("user")
74 ${pass} Evaluate ${olts}[${I}].get("pass")
75 ${serial_number} Evaluate ${olts}[${I}].get("serial")
76 ${olt_ssh_ip} Evaluate ${olts}[${I}].get("sship")
Andrea Campanella3dcce272021-01-15 16:04:47 +010077 ${type} Evaluate ${olts}[${I}].get("type")
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000078 ${power_switch_port} Evaluate ${olts}[${I}].get("power_switch_port")
Suchitra Vemuri09f878d2021-02-10 18:19:04 -080079 ${orig_olt_port} Evaluate ${olts}[${I}].get("oltPort")
80 ${port}= Set Variable If "${orig_olt_port}" == "None" ${OLT_PORT} ${orig_olt_port}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080081 ${onu_count}= Get ONU Count For OLT ${hosts.src} ${serial_number}
Suchitra Vemurife309412020-12-01 19:19:52 -080082 ${onu_list}= Get ONU List For OLT ${hosts.src} ${serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080083 ${olt} Create Dictionary ip ${ip} user ${user} pass
Andrea Campanella3dcce272021-01-15 16:04:47 +010084 ... ${pass} sn ${serial_number} onucount ${onu_count} type ${type}
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000085 ... sship ${olt_ssh_ip} oltport ${port} powerswitchport ${power_switch_port}
86 ... onus ${onu_list}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080087 Append To List ${list_olts} ${olt}
88 END
89 ${num_all_onus}= Get Length ${hosts.src}
90 ${num_all_onus}= Convert to String ${num_all_onus}
Andy Bavier88cd9f62019-11-26 16:22:33 -070091 #send sadis file to onos
Andy Baviera2691752019-11-27 12:18:38 -070092 ${sadis_file}= Get Variable Value ${sadis.file}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070093 Log To Console \nSadis File:${sadis_file}
Cristina de Franciscoc4cfd7e2023-10-09 10:55:08 +020094 Run Keyword Unless '${sadis_file}' == '${None}' Send File To Onos ${sadis_file} apps/
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080095 Set Suite Variable ${num_all_onus}
96 Set Suite Variable ${num_olts}
97 Set Suite Variable ${list_olts}
98 ${olt_count}= Get Length ${list_olts}
99 Set Suite Variable ${olt_count}
Andrea Campanella3dcce272021-01-15 16:04:47 +0100100 @{container_list}= Create List ${OLT_ADAPTER_APP_LABEL} adapter-open-onu voltha-api-server
Andy Bavier88cd9f62019-11-26 16:22:33 -0700101 ... voltha-ro-core voltha-rw-core-11 voltha-rw-core-12 voltha-ofagent
102 Set Suite Variable ${container_list}
103 ${datetime}= Get Current Date
suraj gour7f6d5fe2019-11-29 10:56:35 +0000104 Set Suite Variable ${datetime}
105
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800106Get ONU Count For OLT
107 [Arguments] ${src} ${serial_number}
108 [Documentation] Gets ONU Count for the specified OLT
109 ${src_length}= Get Length ${src}
110 ${count}= Set Variable 0
111 FOR ${I} IN RANGE 0 ${src_length}
112 ${sn} Evaluate ${src}[${I}].get("olt")
TorstenThiemed4f48962020-12-08 12:17:19 +0000113 ${count}= Run Keyword If '${serial_number}' == '${sn}' Evaluate ${count} + 1
114 ... ELSE Set Variable ${count}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800115 END
116 [Return] ${count}
117
Suchitra Vemurife309412020-12-01 19:19:52 -0800118Get ONU List For OLT
119 [Arguments] ${src} ${serial_number}
120 [Documentation] Gets ONU List for the specified OLT
121 ${src_length}= Get Length ${src}
122 ${onu_list}= Create List
123 FOR ${I} IN RANGE 0 ${src_length}
124 ${sn} Evaluate ${src}[${I}].get("olt")
Matteo Scandolo243288d2021-09-20 14:48:58 -0700125 Run Keyword If '${serial_number}' == '${sn}' Append To List ${onu_list} ${src}[${I}][onu]
Suchitra Vemurife309412020-12-01 19:19:52 -0800126 ... ELSE Set Variable ${onu_list}
127 END
128 [Return] ${onu_list}
129
suraj gour7f6d5fe2019-11-29 10:56:35 +0000130WPA Reassociate
suraj gour7f6d5fe2019-11-29 10:56:35 +0000131 [Documentation] Executes a particular wpa_cli reassociate, which performs force reassociation
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700132 [Arguments] ${iface} ${ip} ${user} ${pass}=${None}
133 ... ${container_type}=${None} ${container_name}=${None}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000134 #Below for loops are used instead of sleep time, to execute reassociate command and check status
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700135 FOR ${i} IN RANGE 70
136 ${output}= Login And Run Command On Remote System
137 ... wpa_cli -i ${iface} reassociate ${ip} ${user}
138 ... ${pass} ${container_type} ${container_name}
139 ${passed}= Run Keyword And Return Status Should Contain ${output} OK
Andy Bavierb63f6d22020-03-12 15:34:37 -0700140 Exit For Loop If ${passed}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700141 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700142 Should Be True ${passed} Status does not contain 'SUCCESS'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700143 FOR ${i} IN RANGE 70
144 ${output}= Login And Run Command On Remote System
Andy Bavierae4a17e2020-02-25 14:54:36 -0700145 ... wpa_cli -i ${iface} status | grep SUCCESS ${ip} ${user}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700146 ... ${pass} ${container_type} ${container_name}
147 ${passed}= Run Keyword And Return Status Should Contain ${output} SUCCESS
Andy Bavierb63f6d22020-03-12 15:34:37 -0700148 Exit For Loop If ${passed}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700149 END
Andy Bavierb63f6d22020-03-12 15:34:37 -0700150 Should Be True ${passed} Status does not contain 'SUCCESS'
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700151
suraj gour7f6d5fe2019-11-29 10:56:35 +0000152Validate Authentication After Reassociate
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700153 [Arguments] ${auth_pass} ${iface} ${ip} ${user} ${pass}=${None}
154 ... ${container_type}=${None} ${container_name}=${None}
155 [Documentation]
156 ... Executes a particular reassociate request on the RG using wpa_cli.
157 ... auth_pass determines if authentication should pass
Andy Bavier84834d42020-02-25 13:49:50 -0700158 ${wpa_log}= Catenate SEPARATOR=. /tmp/wpa ${iface} log
159 ${output}= Login And Run Command On Remote System truncate -s 0 ${wpa_log}; cat ${wpa_log}
160 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
161 Log ${output}
162 Should Not Contain ${output} authentication completed successfully
suraj gour7f6d5fe2019-11-29 10:56:35 +0000163 WPA Reassociate ${iface} ${ip} ${user} ${pass} ${container_type} ${container_name}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700164 Run Keyword If '${auth_pass}' == 'True' Wait Until Keyword Succeeds ${timeout} 2s
Andy Bavier84834d42020-02-25 13:49:50 -0700165 ... Check Remote File Contents True ${wpa_log} ${iface}.*authentication completed successfully
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700166 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000167 Run Keyword If '${auth_pass}' == 'False' Sleep 20s
Suchitra Vemuri3cb29f82020-02-25 13:59:58 -0800168 Run Keyword If '${auth_pass}' == 'False' Check Remote File Contents False /tmp/wpa.log
Andy Bavier84834d42020-02-25 13:49:50 -0700169 ... ${iface}.*authentication completed successfully ${ip} ${user} ${pass}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700170 ... ${container_type} ${container_name}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000171
172Send Dhclient Request To Release Assigned IP
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700173 [Arguments] ${iface} ${ip} ${user} ${path_dhcpleasefile} ${pass}=${None}
174 ... ${container_type}=${None} ${container_name}=${None}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000175 [Documentation] Executes a dhclient with option to release ip against a particular interface on the RG (src)
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700176 ${result}= Login And Run Command On Remote System
177 ... dhclient -nw -r ${iface} && rm ${path_dhcpleasefile}/dhclient.* ${ip} ${user}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000178 ... ${pass} ${container_type} ${container_name}
179 Log ${result}
180 #Should Contain ${result} DHCPRELEASE
181 [Return] ${result}
suraj gour1ecfae92019-12-20 15:11:40 +0000182
183Check Remote File Contents For WPA Logs
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700184 [Arguments] ${file_should_exist} ${file} ${pattern} ${ip} ${user} ${pass}=${None}
185 ... ${container_type}=${None} ${container_name}=${None} ${prompt}=~$
suraj gour1ecfae92019-12-20 15:11:40 +0000186 [Documentation] Checks for particular pattern count in a file
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700187 ${result}= Login And Run Command On Remote System
188 ... cat ${file} | grep '${pattern}' | wc -l ${ip} ${user} ${pass}
suraj gour1ecfae92019-12-20 15:11:40 +0000189 ... ${container_type} ${container_name} ${prompt}
190 [Return] ${result}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000191
192Perform Sanity Test
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800193 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure
194 ... for all the ONUs connected to each OLT - ATT workflow
TorstenThiemec3c23232021-01-13 13:06:31 +0000195 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
196 ... In all other (common) cases flag has to be set False (default).
197 [Arguments] ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800198 FOR ${J} IN RANGE 0 ${num_olts}
199 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
200 ${onu_count}= Set Variable ${list_olts}[${J}][onucount]
201 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
202 ... ${olt_serial_number}
203 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000204 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800205 Perform Sanity Test Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${onu_count}
TorstenThiemec3c23232021-01-13 13:06:31 +0000206 ... ${supress_add_subscriber}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800207 END
208
209Perform Sanity Test Per OLT
TorstenThiemec3c23232021-01-13 13:06:31 +0000210 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000211 [Documentation] This keyword performs Sanity Test Procedure
212 ... Sanity test performs authentication, dhcp and pings for all the ONUs given for the POD
213 ... This keyword can be used to call in any other tests where sanity check is required
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800214 ... and avoids duplication of code. - ATT workflow
TorstenThiemec3c23232021-01-13 13:06:31 +0000215 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
216 ... In all other (common) cases flag has to be set False (default).
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800217 FOR ${I} IN RANGE 0 ${num_all_onus}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000218 ${src}= Set Variable ${hosts.src[${I}]}
219 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800220 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200221 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700222 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000223 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800224 # Check ONU port is Enabled in ONOS
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700225 Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000226 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Matteo Scandoloebf2be42021-09-22 09:46:50 -0700227 # Verify Default Meter in ONOS (valid only for ATT and only if subscriber is not provisioned)
228 Run Keyword Unless ${supress_add_subscriber}
229 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo243288d2021-09-20 14:48:58 -0700230 ... Verify Default Meter Present in ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700231 # Verify default EAPOL flows are added for the ONU port
TorstenThiemec3c23232021-01-13 13:06:31 +0000232 Run Keyword Unless ${supress_add_subscriber}
233 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700234 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800235 # Verify LLDP flow in ONOS
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800236 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800237 ... Verify LLDP Flow Added ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} 1
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800238 # Verify ONU state in voltha
Hardik Windlass58b23a32022-05-10 11:06:48 +0530239 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800240 ... ENABLED ACTIVE REACHABLE
241 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
242 # Perform Authentication
Andy Bavier84834d42020-02-25 13:49:50 -0700243 ${wpa_log}= Run Keyword If ${has_dataplane} Catenate SEPARATOR=.
244 ... /tmp/wpa ${src['dp_iface_name']} log
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700245 Run Keyword If ${has_dataplane} Validate Authentication True
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000246 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
Andy Bavier84834d42020-02-25 13:49:50 -0700247 ... ${src['container_type']} ${src['container_name']} ${wpa_log}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700248 Wait Until Keyword Succeeds ${timeout} 2
ubuntu6b6e7d42020-03-02 12:35:42 -0800249 ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
TorstenThiemec3c23232021-01-13 13:06:31 +0000250 Run Keyword Unless ${supress_add_subscriber}
TorstenThieme4e2168e2021-06-22 14:01:47 +0000251 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000252 ... volt-add-subscriber-access ${of_id} ${onu_port}
Suchitra Vemuri9da44302020-03-04 14:24:49 -0800253 # Verify that no pending flows exist for the ONU port
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700254 Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri9da44302020-03-04 14:24:49 -0800255 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Hardik Windlass21807632020-04-14 16:24:55 +0530256 # Verify subscriber access flows are added for the ONU port
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700257 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass21807632020-04-14 16:24:55 +0530258 ... Verify Subscriber Access Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
259 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['s_tag']}
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700260 # Verify subscriber EAPOL flow is installed
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700261 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700262 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
263 ... ${onu_port} ${src['c_tag']}
Hardik Windlass2a9b1592020-07-23 18:28:13 +0530264 # Verify Meters in ONOS
Hardik Windlass58b23a32022-05-10 11:06:48 +0530265 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass2a9b1592020-07-23 18:28:13 +0530266 ... Verify Meters in ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700267 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000268 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
269 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
270 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
271 ... ${dst['container_name']}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700272 Wait Until Keyword Succeeds ${timeout} 2s
ubuntu6b6e7d42020-03-02 12:35:42 -0800273 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000274 END
275
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000276Perform Sanity Test DT
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800277 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for DT workflow
TorstenThiemec3c23232021-01-13 13:06:31 +0000278 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
279 ... In all other (common) cases flag has to be set False (default).
280 [Arguments] ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800281 FOR ${J} IN RANGE 0 ${num_olts}
282 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
283 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
284 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
285 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
286 ... ${olt_serial_number}
287 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000288 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800289 Perform Sanity Test DT Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${num_onus}
TorstenThiemec3c23232021-01-13 13:06:31 +0000290 ... ${supress_add_subscriber}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800291 # Verify ONOS Flows
292 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
293 ${onos_flows_count}= Evaluate 4 * ${num_onus}
294 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
295 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
296 ... ${onos_flows_count}
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800297 # Verify LLDP flow in ONOS
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800298 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800299 ... Verify LLDP Flow Added ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} 1
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800300 # Verify VOLTHA Flows
301 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
302 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
303 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
304 ${onu_flows}= Set Variable 2
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800305 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000306 ... ${olt_flows} ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800307 ${List_ONU_Serial} Create List
308 Set Suite Variable ${List_ONU_Serial}
Suchitra Vemuri21a47fd2020-11-16 18:39:09 -0800309 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800310 Log ${List_ONU_Serial}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000311 Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800312 ... ${List_ONU_Serial} ${onu_flows}
313 END
314
315
316Perform Sanity Test DT Per OLT
TorstenThiemec3c23232021-01-13 13:06:31 +0000317 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000318 [Documentation] This keyword performs Sanity Test Procedure for DT Workflow
319 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
320 ... This keyword can be used to call in any other tests where sanity check is required
321 ... and avoids duplication of code.
TorstenThiemec3c23232021-01-13 13:06:31 +0000322 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
323 ... In all other (common) cases flag has to be set False (default).
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800324 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000325 ${src}= Set Variable ${hosts.src[${I}]}
326 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800327 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200328 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700329 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000330 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000331 # Check ONU port is Enabled in ONOS
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700332 Wait Until Keyword Succeeds 120s 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000333 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
TorstenThiemec3c23232021-01-13 13:06:31 +0000334 Run Keyword Unless ${supress_add_subscriber}
TorstenThieme4e2168e2021-06-22 14:01:47 +0000335 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000336 ... volt-add-subscriber-access ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530337 # Verify subscriber access flows are added for the ONU port
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700338 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass25e11702020-03-30 20:05:19 +0530339 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
340 ... ${onu_port} ${nni_port} ${src['s_tag']}
TorstenThiemea36068c2021-02-19 09:57:32 +0000341 # Verify ONU state in voltha
342 ${onu_reasons}= Create List omci-flows-pushed
Andrea Campanella753510e2022-04-28 23:26:27 +0200343 Run Keyword If ${supress_add_subscriber} Append To List ${onu_reasons} onu-reenabled
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700344 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000345 ... ENABLED ACTIVE REACHABLE
TorstenThiemec3c23232021-01-13 13:06:31 +0000346 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
Hardik Windlass2a9b1592020-07-23 18:28:13 +0530347 # Verify Meters in ONOS
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000348 Wait Until Keyword Succeeds ${timeout} 5s
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700349 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530350 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700351 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000352 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
353 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
354 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
355 ... ${dst['container_name']}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000356 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800357
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000358Perform Sanity Test DT FTTB
359 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for DT-FTTB workflow
360 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
361 ... In all other (common) cases flag has to be set False (default).
362 [Arguments] ${supress_add_subscriber}=False
363 FOR ${J} IN RANGE 0 ${num_olts}
364 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
365 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
366 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
367 ... ${olt_serial_number}
368 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
369 Perform Sanity Test DT FTTB Per OLT ${of_id} ${nni_port} ${olt_serial_number}
370 ... ${supress_add_subscriber}
371 END
372
373Perform Sanity Test DT FTTB Per OLT
374 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${supress_add_subscriber}=False
375 [Documentation] This keyword performs Sanity Test Procedure for DT-FTTB Workflow
376 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
377 ... This keyword can be used to call in any other tests where sanity check is required
378 ... and avoids duplication of code.
379 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
380 ... In all other (common) cases flag has to be set False (default).
381 FOR ${I} IN RANGE 0 ${num_all_onus}
382 ${src}= Set Variable ${hosts.src[${I}]}
383 ${dst}= Set Variable ${hosts.dst[${I}]}
384 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200385 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000386 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
387 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
388 # Check ONU port is Enabled in ONOS
389 Wait Until Keyword Succeeds 120s 2s
390 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
391 Run Keyword Unless ${supress_add_subscriber}
392 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
393 ... volt-add-subscriber-access ${of_id} ${onu_port}
394 # Verify ONOS flows are added for the ONU port
395 Wait Until Keyword Succeeds ${timeout} 5s
396 ... Verify ONOS Flows Added For DT FTTB ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
397 ... ${onu_port} ${nni_port} ${src['service']}
398 # Verify that the Subscriber is present at the given location
399 Wait Until Keyword Succeeds ${timeout} 5s
400 ... Verify Programmed Subscribers DT FTTB ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
401 ... ${onu_port} ${src['service']}
402 # Verify ONU state in voltha
403 ${onu_reasons}= Create List omci-flows-pushed
Andrea Campanella753510e2022-04-28 23:26:27 +0200404 Run Keyword If ${supress_add_subscriber} Append To List ${onu_reasons} onu-reenabled
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000405 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
406 ... ENABLED ACTIVE REACHABLE
407 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
408 # Verify Meters in ONOS
409 Wait Until Keyword Succeeds ${timeout} 5s
410 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlass256993e2022-05-24 09:55:46 +0530411 ... FTTB_SUBSCRIBER_TRAFFIC
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000412 # Verify Mac Learner Mappings
413 Wait Until Keyword Succeeds ${timeout} 5s Validate Mac Learner Mapping in ONOS
Hardik Windlass256993e2022-05-24 09:55:46 +0530414 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port} ${src['service'][0]['s_tag']}
Hardik Windlassa7b34be2022-03-22 17:28:31 +0000415 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
416 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
417 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
418 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
419 ... ${dst['container_name']}
420 END
421
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800422Validate All OLT Flows
423 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for DT workflow
424 FOR ${J} IN RANGE 0 ${num_olts}
425 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
426 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
427 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
428 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
429 ... ${olt_serial_number}
430 Set Global Variable ${of_id}
431 # Verify ONOS Flows
432 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
433 ${onos_flows_count}= Evaluate 4 * ${num_onus}
434 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
435 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
436 ... ${onos_flows_count}
437 # Verify VOLTHA Flows
438 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
439 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
440 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
441 ${onu_flows}= Set Variable 2
442 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
443 ... ${olt_device_id}
444 ${List_ONU_Serial} Create List
445 Set Suite Variable ${List_ONU_Serial}
Andrea Campanella6391f842020-11-16 10:01:18 +0100446 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800447 Log ${List_ONU_Serial}
448 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
449 ... ${List_ONU_Serial} ${onu_flows}
450 END
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000451
TorstenThieme70bc5262021-01-19 12:12:55 +0000452Perform Sanity Tests TT
453 [Documentation] This keyword performs both Sanity Test Procedure for TT Workflow
454 ... Sanity Test TT for HSIA, VoD, VoIP services and Sanity Test TT for MCAST
455 ... For repeating sanity tests without subscriber changes set flag supress_add_subscriber=True.
456 ... In all other (common) cases flag has to be set False (default).
457 [Arguments] ${supress_add_subscriber}=False
458 Perform Sanity Test TT ${supress_add_subscriber}
TorstenThieme136ebf72021-02-26 14:27:07 +0000459 # run of mcast sanity test is currently limited for real HW
460 Run Keyword If ${has_dataplane} Perform Sanity Test TT MCAST ${supress_add_subscriber}
TorstenThieme70bc5262021-01-19 12:12:55 +0000461
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000462Provision Subscription TT
463 [Documentation] Provision Subscription TT
464 [Arguments] ${supress_add_subscriber}=False
465 FOR ${I} IN RANGE 0 ${num_all_onus}
466 ${src}= Set Variable ${hosts.src[${I}]}
467 ${dst}= Set Variable ${hosts.dst[${I}]}
468 ${service_type}= Get Variable Value ${src['service_type']} "null"
469 Run Keyword IF '${service_type}' != 'mcast' Provision Subscription for ONU TT ${src} ${dst}
470 ... ${supress_add_subscriber}
471 END
472
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700473Perform Sanity Test TT
474 [Documentation] This keyword performs Sanity Test Procedure for TT Workflow
475 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
476 ... This keyword can be used to call in any other tests where sanity check is required
477 ... and avoids duplication of code.
TorstenThieme70bc5262021-01-19 12:12:55 +0000478 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
479 ... In all other (common) cases flag has to be set False (default).
Hardik Windlassc609eb02022-02-22 11:28:37 +0000480 [Arguments] ${supress_add_subscriber}=False ${maclearning_enabled}=False
TorstenThieme1e207df2022-05-17 10:31:34 +0000481 @{onu_list}= Create List
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800482 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700483 ${src}= Set Variable ${hosts.src[${I}]}
484 ${dst}= Set Variable ${hosts.dst[${I}]}
485 ${service_type}= Get Variable Value ${src['service_type']} "null"
TorstenThieme1e207df2022-05-17 10:31:34 +0000486 ${sn}= Set Variable ${src['onu']}
487 # make sure add subscriber will be done only once per onu in case of single tag (not ${unitag_sub})
488 ${onu_id}= Get Index From List ${onu_list} ${sn}
489 ${supression_flag} Set Variable If not ${unitag_sub} and -1 != ${onu_id} True ${supress_add_subscriber}
490 Append To List ${onu_list} ${sn}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000491 Run Keyword IF '${service_type}' != 'mcast' Sanity Test TT one ONU ${src} ${dst}
TorstenThieme1e207df2022-05-17 10:31:34 +0000492 ... ${supression_flag} ${maclearning_enabled}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700493 END
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000494 # Verify Subscriber Access Flow Count
495 @{particular_onu_device_port}= Create List
496 FOR ${I} IN RANGE 0 ${num_all_onus}
497 ${src}= Set Variable ${hosts.src[${I}]}
498 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000499 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS
500 ... ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000501 Append To List ${particular_onu_device_port} ${onu_port}
502 END
503 ${list_onu_port}= Remove Duplicates ${particular_onu_device_port}
504 ${num_of_provisioned_onus}= Get Length ${list_onu_port}
505 FOR ${I} IN RANGE 0 ${olt_count}
506 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
507 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
Hardik Windlass315d6152021-06-09 08:22:44 +0000508 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000509 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
510 # Verify ONOS Flows
511 # Number of Access Flows on ONOS equals 16 * the Number of Active ONUs + 3 for default LLDP, IGMP and DHCP
512 ${onos_flows_count}= Run Keyword If ${has_dataplane} Evaluate 16 * ${num_of_provisioned_onus} + 3
513 ... ELSE Evaluate 15 * ${num_of_provisioned_onus} + 3
Matteo Scandoloc2f48fa2021-09-29 13:32:55 -0700514 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000515 ... Verify Added Flow Count for OLT TT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
516 ... ${onos_flows_count}
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800517 # Verify LLDP flow in ONOS
Matteo Scandolo6a90bda2021-11-30 11:31:38 -0800518 Wait Until Keyword Succeeds ${timeout} 5s
Matteo Scandolo7bdbe2d2021-11-29 15:48:25 -0800519 ... Verify LLDP Flow Added ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} 1
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000520 # Verify VOLTHA Flows
521 # Number of per OLT Flows equals 10 * Number of Active ONUs + 3 for default LLDP, IGMP and DHCP
522 ${olt_flows}= Run Keyword If ${has_dataplane} Evaluate 10 * ${num_of_provisioned_onus} + 3
523 ... ELSE Evaluate 9 * ${num_of_provisioned_onus} + 3
524 # Number of per ONU Flows equals 6 for 3play service data plane + 4 for Trap to Host Flows
525 ${onu_flows}= Run Keyword If ${has_dataplane} Set Variable 10
526 ... ELSE Set Variable 9
527 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
528 ... ${olt_device_id}
529 ${List_ONU_Serial} Create List
530 Set Suite Variable ${List_ONU_Serial}
531 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
532 Log ${List_ONU_Serial}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000533 # TODO: Fix ${onu_flows} calculations based on UNIs provisioned
534 # Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
535 # ... ${List_ONU_Serial} ${onu_flows}
Hardik Windlass3ec9d4f2021-06-08 05:48:15 +0000536 END
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700537
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000538Provision Subscription for ONU TT
539 [Documentation] This keyword performs provision services a single ONU for TT workflow
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700540 ... Tests for one ONU
TorstenThieme70bc5262021-01-19 12:12:55 +0000541 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
542 ... In all other (common) cases flag has to be set False (default).
543 [Arguments] ${src} ${dst} ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800544 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700545 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000546 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200547 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000548 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000549 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700550 # Check ONU port is Enabled in ONOS
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000551 Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000552 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassb1bda362021-11-24 11:54:36 +0000553 # Add subscriber
554 ${add_sub_cmd}= Run Keyword If ${unitag_sub}
555 ... Catenate volt-add-subscriber-unitag --tpId ${src['tp_id']} --sTag ${src['s_tag']}
556 ... --cTag ${src['c_tag']} ${src['onu']}-${src['uni_id']}
557 ... ELSE
558 ... Set Variable volt-add-subscriber-access ${of_id} ${onu_port}
TorstenThiemea36068c2021-02-19 09:57:32 +0000559 Run Keyword Unless ${supress_add_subscriber}
Hardik Windlassb1bda362021-11-24 11:54:36 +0000560 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${add_sub_cmd}
TorstenThieme1e207df2022-05-17 10:31:34 +0000561 # Verify no Pending Flows in ONOS in case of subscriber added, it is needed to check the correct ONU state in voltha
562 # 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
563 Run Keyword Unless ${supress_add_subscriber} Run Keyword And Ignore Error
564 ... Wait Until Keyword Succeeds 10s 1s
565 ... Verify Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
566 # Then wait for pending flows are disappeared again
567 Run Keyword Unless ${supress_add_subscriber} Wait Until Keyword Succeeds ${timeout} 2s
568 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
TorstenThiemea36068c2021-02-19 09:57:32 +0000569 # Verify ONU state in voltha
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000570 ${onu_reasons}= Create List omci-flows-pushed onu-reenabled
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000571 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
TorstenThieme1e207df2022-05-17 10:31:34 +0000572 ... ENABLED ACTIVE REACHABLE ${src['onu']} onu=True onu_reason=${onu_reasons}
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000573
574Sanity Test TT one ONU
575 [Documentation] This keyword performs sanity test for a single ONU for TT workflow
576 ... Tests for one ONU
577 ... Assertions apply to HSIA, VoD, VoIP services
578 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
579 ... In all other (common) cases flag has to be set False (default).
Hardik Windlassc609eb02022-02-22 11:28:37 +0000580 [Arguments] ${src} ${dst} ${supress_add_subscriber}=False ${maclearning_enabled}=False
Huseyin Ahmet AYDIN7cb5ae62021-10-28 11:07:27 +0000581 Provision Subscription for ONU TT ${src} ${dst} ${supress_add_subscriber}
582 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
583 Set Global Variable ${of_id}
584 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
585 ... ${of_id} ${src['uni_id']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700586 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
587 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
588 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
589 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
590 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
591 ... ${dst['container_name']}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000592 Run Keyword If '${src['service_type']}'!='hsia'
593 ... Run Keywords
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000594 ... Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri8d3b0032020-09-11 17:49:08 -0700595 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Suchitra Vemuri42819412020-10-01 17:45:43 -0700596 ... ${src['c_tag']}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000597 ... AND Run Keyword If ${maclearning_enabled}
598 ... Wait Until Keyword Succeeds ${timeout} 5s Validate Mac Learner Mapping in ONOS
599 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port} ${src['c_tag']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700600
601Perform Sanity Test TT MCAST
602 [Documentation] This keyword performs Sanity Test Procedure for TT Workflow
603 ... Adds subscribers
604 ... Validates for MCAST
TorstenThieme70bc5262021-01-19 12:12:55 +0000605 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
606 ... In all other (common) cases flag has to be set False (default).
607 [Arguments] ${supress_add_subscriber}=False
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800608 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700609 ${src}= Set Variable ${hosts.src[${I}]}
610 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700611 ${service_type}= Get Variable Value ${src['service_type']} "null"
612 Run Keyword IF '${service_type}' == 'mcast' Sanity Test TT MCAST one ONU ${src}
TorstenThiemea36068c2021-02-19 09:57:32 +0000613 ... ${dst} ${supress_add_subscriber}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700614 END
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700615
616Sanity Test TT MCAST one ONU
617 [Documentation] This keyword performs sanity test for a single ONU for TT workflow
618 ... Tests for one ONU
619 ... Assertions apply to MCAST services
TorstenThieme70bc5262021-01-19 12:12:55 +0000620 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
621 ... In all other (common) cases flag has to be set False (default).
622 [Arguments] ${src} ${dst} ${supress_add_subscriber}=False
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700623 # Check for iperf and jq tools
624 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf jq
625 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
626 ... ${src['container_name']}
627 Pass Execution If ${rc} != 0 Skipping test: iperf / jq not found on the RG
628
629 #Reset the IP on the interface
630 ${output}= Login And Run Command On Remote System sudo ifconfig ${src['dp_iface_name']} 0
631 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
632 # Kill iperf on BNG
633 ${rg_output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
634 ... sudo kill -9 `pidof iperf`
635 ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
636 ... ${dst['container_name']}
637
638 # Setup RG for Multi-cast test
639 ${output}= Login And Run Command On Remote System
640 ... sudo ifconfig ${src['dp_iface_name']} ${src['mcast_rg']} up ; sudo kill -9 `pidof iperf`
641 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
642 ${output}= Login And Run Command On Remote System
643 ... sudo ip route add ${src['mcast_grp_subnet_mask']} dev ${src['dp_iface_name']} scope link
644 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
645
646 # Perform operations for adding subscriber
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800647 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700648 Set Global Variable ${of_id}
TorstenThiemedda37652021-11-11 16:22:05 +0000649 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200650 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000651 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000652 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700653 # Check ONU port is Enabled in ONOS
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000654 Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000655 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
TorstenThiemea36068c2021-02-19 09:57:32 +0000656 Run Keyword Unless ${supress_add_subscriber}
TorstenThieme4e2168e2021-06-22 14:01:47 +0000657 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700658 ... volt-add-subscriber-access ${of_id} ${onu_port}
TorstenThiemea36068c2021-02-19 09:57:32 +0000659 # Verify ONU state in voltha
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000660 ${onu_reasons}= Create List omci-flows-pushed onu-reenabled
Hardik Windlass5a2d1f42021-11-12 12:52:04 +0000661 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700662 ... ENABLED ACTIVE REACHABLE
Matteo Scandolo74bd5c32020-12-08 09:52:19 -0800663 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700664
665 # Setup iperf on the BNG
666 ${server_output}= Login And Run Command On Remote System
667 ... sudo iperf -c ${dst['dp_iface_ip_qinq']} -u -T 32 -t 60 -i 1 &
668 ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
669 ... ${dst['container_name']}
670
671 # Setup iperf on the RG
672 ${rg_output}= Run Keyword and Continue On Failure Wait Until Keyword Succeeds 90s 5s
673 ... Login And Run Command On Remote System
674 ... rm -rf /tmp/rg_output ; sudo iperf -s -u -B ${dst['dp_iface_ip_qinq']} -i 1 -D >> /tmp/rg_output
675 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
676 Log ${rg_output}
677 Sleep 60s
678 ${output}= Run Keyword and Continue On Failure Wait Until Keyword Succeeds 90s 5s
679 ... Login And Run Command On Remote System
680 ... cat /tmp/rg_output | grep KBytes
681 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
682 Log ${output}
Cristina de Franciscoc4cfd7e2023-10-09 10:55:08 +0200683 Should Contain ${output} KBytes Could not find 'KBytes' in iperf output
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -0700684
685 # Kill iperf on BNG
686 ${rg_output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
687 ... sudo kill -9 `pidof iperf`
688 ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
689 ... ${dst['container_name']}
690
691 # Kill iperf on the RG
692 ${output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
693 ... sudo kill -9 `pidof iperf`
694 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
695
Hardik Windlass62db9d92021-05-17 09:32:40 +0000696Setup Soak
697 [Documentation] Pre-test Setup for Soak Job
698 ${olt_ids} Create List
699 FOR ${I} IN RANGE 0 ${num_olts}
700 ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
701 ${olt_device_id}= Get Device ID From SN ${olt_serial_number}
702 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
703 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
704 ... ${olt_serial_number}
TorstenThiemedda37652021-11-11 16:22:05 +0000705 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass62db9d92021-05-17 09:32:40 +0000706 ${olt} Create Dictionary device_id ${olt_device_id} logical_id ${logical_id}
707 ... of_id ${of_id} sn ${olt_serial_number}
708 Append To List ${olt_ids} ${olt}
709 END
710 Set Global Variable ${olt_ids}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700711
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000712Setup
713 [Documentation] Pre-test Setup
Hardik Windlass4ed54502021-05-14 07:34:15 +0000714 [Arguments] ${skip_empty_device_list_test}=False
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000715 #test for empty device list
Hardik Windlass4ed54502021-05-14 07:34:15 +0000716 Run Keyword If '${skip_empty_device_list_test}'=='False' Test Empty Device List
Hardik Windlass5e214b22021-02-26 10:37:14 +0000717 # TBD: Need for this Sleep
718 Run Keyword If ${has_dataplane} Sleep 180s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800719 # Create a list of olt ids (logical and device_id)
720 ${olt_ids} Create List
721 FOR ${I} IN RANGE 0 ${num_olts}
722 #create/preprovision device
Andrea Campanella3dcce272021-01-15 16:04:47 +0100723 ${olt_device_id}= Run Keyword If "${list_olts}[${I}][type]" == "${None}"
Suchitra Vemuri09f878d2021-02-10 18:19:04 -0800724 ... Create Device ${list_olts}[${I}][ip] ${list_olts}[${I}][oltport]
725 ... ELSE Create Device ${list_olts}[${I}][ip] ${list_olts}[${I}][oltport] ${list_olts}[${I}][type]
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800726 ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
727 #Set Suite Variable ${olt_device_id}
728 #validate olt states
729 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass8b446492021-06-10 06:25:23 +0000730 ... Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN ${olt_device_id} by_dev_id=True
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800731 Sleep 5s
732 Enable Device ${olt_device_id}
Suchitra Vemuricf6e89c2021-03-24 19:14:15 -0700733 # Increasing the timer to incorporate wait time for in-band
734 Wait Until Keyword Succeeds 540s 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800735 ... Validate OLT Device ENABLED ACTIVE REACHABLE ${olt_serial_number}
736 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
737 # Set Suite Variable ${logical_id}
738 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
739 ... ${olt_serial_number}
740 ${olt} Create Dictionary device_id ${olt_device_id} logical_id ${logical_id}
741 ... of_id ${of_id} sn ${olt_serial_number}
742 Append To List ${olt_ids} ${olt}
743 END
744 Set Global Variable ${olt_ids}
745
746Get ofID From OLT List
747 [Documentation] Retrieves the corresponding of_id for the OLT serial number specified
748 [Arguments] ${serial_number}
749 FOR ${I} IN RANGE 0 ${olt_count}
750 ${sn}= Get From Dictionary ${olt_ids}[${I}] sn
Andrea Campanella317a94c2020-11-13 10:38:19 +0100751 ${of_id}= Run Keyword IF "${serial_number}"=="${sn}"
752 ... Get From Dictionary ${olt_ids}[${I}] of_id ELSE Set Variable ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800753 END
754 [Return] ${of_id}
755
756Get OLTDeviceID From OLT List
757 [Documentation] Retrieves the corresponding olt_device_id for the OLT serial number specified
758 [Arguments] ${serial_number}
Suchitra Vemuri4b8f4f52020-11-17 19:12:50 -0800759 ${olt_device_id}= Set Variable 0
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800760 FOR ${I} IN RANGE 0 ${olt_count}
761 ${sn}= Get From Dictionary ${olt_ids}[${I}] sn
Andrea Campanella317a94c2020-11-13 10:38:19 +0100762 ${olt_device_id}= Run Keyword IF "${serial_number}"=="${sn}"
763 ... Get From Dictionary ${olt_ids}[${I}] device_id ELSE Set Variable ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800764 END
765 [Return] ${olt_device_id}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000766
Andrea Campanellad848de02020-11-24 10:23:41 +0100767Get Num of Onus From OLT SN
768 [Documentation] Retrieves the corresponding number of ONUs for a given OLT based on serial number specified
769 [Arguments] ${serial_number}
770 ${num_of_olt_onus}= Set Variable 0
771 FOR ${I} IN RANGE 0 ${olt_count}
772 ${sn}= Get From Dictionary ${olt_ids}[${I}] sn
773 ${num_of_olt_onus}= Run Keyword IF "${serial_number}"=="${sn}"
774 ... Get From Dictionary ${list_olts}[${I}] onucount ELSE Set Variable ${num_of_olt_onus}
775 END
776 [Return] ${num_of_olt_onus}
777
Hardik Windlassaaea3402020-03-10 19:45:45 +0530778Validate ONUs After OLT Disable
779 [Documentation] Validates the ONUs state in Voltha, ONUs port state in ONOS
780 ... and that pings do not succeed After corresponding OLT is Disabled
Andrea Campanella4e507882020-11-26 11:33:11 +0100781 [Arguments] ${num_onus} ${olt_serial_number}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530782 FOR ${I} IN RANGE 0 ${num_onus}
783 ${src}= Set Variable ${hosts.src[${I}]}
784 ${dst}= Set Variable ${hosts.dst[${I}]}
Andrea Campanella4e507882020-11-26 11:33:11 +0100785 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800786 ${of_id}= Get ofID From OLT List ${src['olt']}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200787 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530788 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
789 ... ${of_id}
Girish Gowdra3f0fadb2021-11-08 16:49:28 -0800790 ${valid_onu_states}= Create List stopping-openomci omci-flows-deleted
Hardik Windlassaaea3402020-03-10 19:45:45 +0530791 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
792 ... Validate Device ENABLED DISCOVERED
Girish Gowdra3f0fadb2021-11-08 16:49:28 -0800793 ... UNREACHABLE ${src['onu']} onu=True onu_reason=${valid_onu_states}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530794 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000795 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530796 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +0530797 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlassaaea3402020-03-10 19:45:45 +0530798 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
799 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530800 END
801
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000802Delete All Devices and Verify
803 [Documentation] Remove any devices from VOLTHA and ONOS
Hardik Windlassc609eb02022-02-22 11:28:37 +0000804 [Arguments] ${maclearning_enabled}=False
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000805 # Clear devices from VOLTHA
806 Disable Devices In Voltha Root=true
807 Wait Until Keyword Succeeds ${timeout} 2s Test Devices Disabled In Voltha Root=true
808 Delete Devices In Voltha Root=true
809 Wait Until Keyword Succeeds ${timeout} 2s Test Empty Device List
Hardik Windlasse8b99222021-01-25 10:03:14 +0000810 FOR ${I} IN RANGE 0 ${num_olts}
811 ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
Matteo Scandolo71ff08a2021-10-21 17:47:27 -0700812 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlasse8b99222021-01-25 10:03:14 +0000813 ... Validate Deleted Device Cleanup In ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${olt_serial_number}
Hardik Windlassc609eb02022-02-22 11:28:37 +0000814 ... ${maclearning_enabled}
Hardik Windlasse8b99222021-01-25 10:03:14 +0000815 END
Hardik Windlass44abec12021-09-27 07:52:33 +0000816 Wait Until Keyword Succeeds ${timeout} 5s Validate Cleanup In ETCD ${INFRA_NAMESPACE}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000817
818Teardown
819 [Documentation] kills processes and cleans up interfaces on src+dst servers
820 Run Keyword If ${has_dataplane} Clean Up Linux
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000821
822Teardown Suite
823 [Documentation] Clean up device if desired
Andrea Campanella82add372021-11-05 12:01:15 +0100824 Start Logging Setup or Teardown Teardown-${SUITE NAME}
Hardik Windlass81375222021-12-02 10:48:01 +0000825 Run Keyword If ${has_dataplane} Clean Up Linux
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000826 Run Keyword If ${teardown_device} Delete All Devices and Verify
Andrea Campanella1ff03222021-09-10 10:14:21 +0200827 Run Keyword And Continue On Failure Collect Logs
TorstenThieme4e2168e2021-06-22 14:01:47 +0000828 Close All ONOS SSH Connections
Hardik Windlass81375222021-12-02 10:48:01 +0000829 Run Keyword If ${has_dataplane} Clean Up All Nodes
Andrea Campanella82add372021-11-05 12:01:15 +0100830 Stop Logging Setup or Teardown Teardown-${SUITE NAME}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000831
832Delete Device and Verify
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800833 [Arguments] ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000834 [Documentation] Disable -> Delete devices via voltctl and verify its removed
Suchitra Vemuri2fa9bba2020-01-22 17:38:48 -0800835 ${olt_device_id}= Get Device ID From SN ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000836 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800837 ... voltctl -c ${VOLTCTL_CONFIG} device disable ${olt_device_id}
Cristina de Franciscoc4cfd7e2023-10-09 10:55:08 +0200838 Should Be Equal As Integers ${rc} 0 Could not disable device ${olt_device_id}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000839 Sleep 5s
840 Wait Until Keyword Succeeds ${timeout} 5s
841 ... Validate OLT Device DISABLED UNKNOWN REACHABLE ${olt_serial_number}
842 ${rc} ${output}= Run and Return Rc and Output
Matteo Scandolo5899be12020-11-11 15:38:07 -0800843 ... voltctl -c ${VOLTCTL_CONFIG} device delete ${olt_device_id}
Hardik Windlassdf5035e2021-01-27 08:34:59 +0000844 Sleep 50s
Cristina de Franciscoc4cfd7e2023-10-09 10:55:08 +0200845 Should Be Equal As Integers ${rc} 0 Could not delete device ${olt_device_id}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000846 Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}
Hardik Windlasse8b99222021-01-25 10:03:14 +0000847 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 15s
848 ... Validate Deleted Device Cleanup In ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000849
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000850Repeat Sanity Test
851 [Documentation] This keyword performs Sanity Test Procedure
852 ... Sanity test performs authentication, dhcp and pings for all the ONUs given for the POD
853 ... This keyword can be used to call in any other tests where sanity check is required
854 ... with wpa reassociation
855 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
856 Set Global Variable ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800857 FOR ${I} IN RANGE 0 ${num_all_onus}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000858 ${src}= Set Variable ${hosts.src[${I}]}
859 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800860 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000861 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800862 # Check ONU port is Enabled in ONOD
863 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000864 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800865 # Verify EAPOL flows are added for the ONU port
866 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700867 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800868 # Verify ONU state in voltha
Suchitra Vemurid1e27fb2020-02-01 16:34:37 -0800869 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri81e4f022020-02-01 13:16:02 -0800870 ... ENABLED ACTIVE REACHABLE
871 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800872 # Perform Authentication
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000873 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
874 ... Validate Authentication After Reassociate
875 ... True ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']}
876 ... ${src['container_type']} ${src['container_name']}
877 Wait Until Keyword Succeeds ${timeout} 2s
David K. Bainbridgec0617c92020-03-05 21:17:19 -0800878 ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000879 Wait Until Keyword Succeeds ${timeout} 2s
TorstenThieme4e2168e2021-06-22 14:01:47 +0000880 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000881 ... volt-add-subscriber-access ${of_id} ${onu_port}
882 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
883 ... Validate DHCP and Ping True True
884 ... ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
885 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
886 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
887 ... ${dst['container_name']}
888 Wait Until Keyword Succeeds ${timeout} 2s Run Keyword And Continue On Failure
David K. Bainbridgec0617c92020-03-05 21:17:19 -0800889 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000890 END
Gayathri.Selvanb6a2b542020-01-24 07:24:23 +0000891
Hardik Windlass41701e82021-01-12 17:44:44 +0000892Disable Enable PON Port Per OLT
893 [Arguments] ${olt_serial_number}
894 [Documentation] This keyword disables and then enables OLT PON port and
895 ... also validate ONUs for each corresponding case
896 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
897 ${olt_pon_port_list}= Retrieve OLT PON Ports ${olt_device_id}
898 ${olt_pon_port_list_len}= Get Length ${olt_pon_port_list}
899 FOR ${INDEX0} IN RANGE 0 ${olt_pon_port_list_len}
900 ${olt_pon_port}= Get From List ${olt_pon_port_list} ${INDEX0}
901 ${olt_peer_list}= Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port}
902 # Disable the OLT PON Port and Validate OLT Device
903 DisableOrEnable OLT PON Port disable ${olt_device_id} ${olt_pon_port}
904 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
905 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
906 ... DISABLED DISCOVERED
907 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
908 ... Validate OLT Device ENABLED ACTIVE REACHABLE
909 ... ${olt_serial_number}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530910 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +0000911 ... Validate ONUs for PON OLT Disable ${olt_serial_number} ${olt_peer_list}
912 # Enable the OLT PON Port back, and check ONU status are back to "ACTIVE"
913 DisableOrEnable OLT PON Port enable ${olt_device_id} ${olt_pon_port}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530914 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +0000915 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
916 ... ENABLED ACTIVE
Hardik Windlass58b23a32022-05-10 11:06:48 +0530917 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +0000918 ... Validate ONUs for PON OLT Enable ${olt_serial_number} ${olt_peer_list}
919 END
920
Hardik Windlass16cdf962020-04-29 15:26:50 +0530921Validate ONUs for PON OLT Disable
Hardik Windlass41701e82021-01-12 17:44:44 +0000922 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530923 [Documentation] This keyword validates that Ping fails for ONUs connected to Disabled OLT PON port
924 ... And Pings succeed for other Active OLT PON port ONUs
925 ... Also it removes subscriber for Disabled OLT PON port ONUs to replicate ATT workflow
Hardik Windlass41701e82021-01-12 17:44:44 +0000926 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530927 ${src}= Set Variable ${hosts.src[${I}]}
928 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +0000929 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200930 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +0000931 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530932 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000933 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530934 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
935 Run Keyword If ${matched}
936 ... Run Keywords
937 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
938 ... Validate Device ENABLED DISCOVERED
Andrea Campanellaa9b59b42021-09-21 16:13:17 +0000939 ... UNREACHABLE ${src['onu']} onu=True onu_reason=omci-flows-deleted
Hardik Windlass58b23a32022-05-10 11:06:48 +0530940 ... AND Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000941 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530942 ... AND Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +0530943 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530944 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
945 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
946 ... ${src['container_name']}
947 # Remove Subscriber Access (To replicate ATT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000948 ... AND Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection
949 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass223a1732021-07-09 05:21:40 +0000950 # Additional Sleep to let subscriber delete process
951 ... AND Sleep 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530952 ... ELSE
953 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +0530954 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530955 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
956 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
957 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530958 END
959
960Validate ONUs for PON OLT Enable
Hardik Windlass41701e82021-01-12 17:44:44 +0000961 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530962 [Documentation] This keyword validates Ping succeeds for all Enabled/Acitve OLT PON ports
963 ... Also performs Auth/subscriberAdd/DHCP/Ping for the ONUs on Re-Enabled OLT PON port
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800964 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530965 ${src}= Set Variable ${hosts.src[${I}]}
966 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +0000967 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +0200968 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +0000969 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +0000970 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530971 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000972 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530973 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
974 ${wpa_log}= Run Keyword If ${has_dataplane} and ${matched} Catenate SEPARATOR=.
975 ... /tmp/wpa ${src['dp_iface_name']} log
976 Run Keyword If ${matched}
977 ... Run Keywords
978 # Perform Cleanup
979 ... Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
980 # Verify ONU port status
Hardik Windlass58b23a32022-05-10 11:06:48 +0530981 ... AND Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000982 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530983 # Verify EAPOL flows are added for the ONU port
984 ... AND Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Matteo Scandolo7e519fb2021-08-13 11:35:16 -0700985 ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530986 # Verify ONU state in voltha
Hardik Windlass58b23a32022-05-10 11:06:48 +0530987 ... AND Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +0530988 ... Validate Device ENABLED ACTIVE REACHABLE
989 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
990 # Perform Authentication
991 ... AND Run Keyword If ${has_dataplane}
992 ... Run Keyword And Continue On Failure Validate Authentication True
993 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
994 ... ${src['container_type']} ${src['container_name']} ${wpa_log}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530995 ... AND Wait Until Keyword Succeeds ${timeout} 2
Hardik Windlass16cdf962020-04-29 15:26:50 +0530996 ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
Hardik Windlass58b23a32022-05-10 11:06:48 +0530997 ... AND Wait Until Keyword Succeeds ${timeout} 2
TorstenThieme4e2168e2021-06-22 14:01:47 +0000998 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530999 ... volt-add-subscriber-access ${of_id} ${onu_port}
1000 # Verify that no pending flows exist for the ONU port
1001 ... AND Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
1002 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
1003 # Verify subscriber access flows are added for the ONU port
Hardik Windlass58b23a32022-05-10 11:06:48 +05301004 ... AND Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301005 ... Verify Subscriber Access Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1006 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['s_tag']}
1007 ... AND Run Keyword If ${has_dataplane}
1008 ... Run Keyword And Continue On Failure Validate DHCP and Ping True
1009 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
1010 ... ${src['ip']} ${src['user']} ${src['pass']}
1011 ... ${src['container_type']} ${src['container_name']}
1012 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1013 ... ${dst['container_type']} ${dst['container_name']}
Hardik Windlass58b23a32022-05-10 11:06:48 +05301014 ... AND Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301015 ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
1016 ... AND Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
1017 ... ELSE
1018 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass58b23a32022-05-10 11:06:48 +05301019 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301020 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1021 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1022 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301023 END
1024
Hardik Windlass41701e82021-01-12 17:44:44 +00001025Disable Enable PON Port Per OLT DT
1026 [Arguments] ${olt_serial_number}
1027 [Documentation] This keyword disables and then enables OLT PON port and
1028 ... also validate ONUs for each corresponding case
1029 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1030 ${olt_pon_port_list}= Retrieve OLT PON Ports ${olt_device_id}
1031 ${olt_pon_port_list_len}= Get Length ${olt_pon_port_list}
1032 FOR ${INDEX0} IN RANGE 0 ${olt_pon_port_list_len}
1033 ${olt_pon_port}= Get From List ${olt_pon_port_list} ${INDEX0}
1034 ${olt_peer_list}= Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port}
TorstenThieme17d6fd22021-09-23 10:00:08 +00001035 ${olt_peer_list_len}= Get Length ${olt_peer_list}
Hardik Windlass41701e82021-01-12 17:44:44 +00001036 # Disable the OLT PON Port and Validate OLT Device
1037 DisableOrEnable OLT PON Port disable ${olt_device_id} ${olt_pon_port}
1038 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1039 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
1040 ... DISABLED DISCOVERED
1041 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1042 ... Validate OLT Device ENABLED ACTIVE REACHABLE
1043 ... ${olt_serial_number}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001044 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +00001045 ... Validate ONUs for PON OLT Disable DT ${olt_serial_number} ${olt_peer_list}
Hardik Windlass41701e82021-01-12 17:44:44 +00001046 # Enable the OLT PON Port back, and check ONU status are back to "ACTIVE"
1047 DisableOrEnable OLT PON Port enable ${olt_device_id} ${olt_pon_port}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001048 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +00001049 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
1050 ... ENABLED ACTIVE
TorstenThieme17d6fd22021-09-23 10:00:08 +00001051 ${olt_peer_list_new}= Wait Until Keyword Succeeds ${timeout} 5s
1052 ... Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port} ${olt_peer_list_len}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001053 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass41701e82021-01-12 17:44:44 +00001054 ... Validate ONUs for PON OLT Enable DT ${olt_serial_number} ${olt_peer_list_new}
1055 END
1056
Hardik Windlass16cdf962020-04-29 15:26:50 +05301057Validate ONUs for PON OLT Disable DT
Hardik Windlass41701e82021-01-12 17:44:44 +00001058 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301059 [Documentation] This keyword validates that Ping fails for ONUs connected to Disabled OLT PON port
1060 ... And Pings succeed for other Active OLT PON port ONUs
1061 ... Also it removes subscriber and deletes ONUs for Disabled OLT PON port to replicate DT workflow
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001062 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301063 ${src}= Set Variable ${hosts.src[${I}]}
1064 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +00001065 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001066 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +00001067 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301068 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +00001069 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301070 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
Girish Gowdra3f0fadb2021-11-08 16:49:28 -08001071 ${valid_onu_states}= Create List stopping-openomci omci-flows-deleted
Hardik Windlass16cdf962020-04-29 15:26:50 +05301072 Run Keyword If ${matched}
1073 ... Run Keywords
1074 ... Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1075 ... Validate Device ENABLED DISCOVERED
Girish Gowdra3f0fadb2021-11-08 16:49:28 -08001076 ... UNREACHABLE ${src['onu']} onu=True onu_reason=${valid_onu_states}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001077 ... AND Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +00001078 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301079 ... AND Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001080 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301081 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1082 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1083 ... ${src['container_name']}
1084 # Remove Subscriber Access (To replicate DT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +00001085 ... AND Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection
1086 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301087 # Delete ONU Device (To replicate DT workflow)
1088 ... AND Delete Device ${onu_device_id}
Hardik Windlass223a1732021-07-09 05:21:40 +00001089 # Additional Sleep to let subscriber and ONU delete process
1090 ... AND Sleep 10s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301091 ... ELSE
1092 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001093 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301094 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1095 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1096 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301097 END
1098
1099Validate ONUs for PON OLT Enable DT
Hardik Windlass41701e82021-01-12 17:44:44 +00001100 [Arguments] ${olt_sn} ${olt_peer_list}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301101 [Documentation] This keyword validates Ping succeeds for all Enabled/Acitve OLT PON ports
1102 ... Also performs subscriberAdd/DHCP/Ping for the ONUs on Re-Enabled OLT PON port
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001103 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301104 ${src}= Set Variable ${hosts.src[${I}]}
1105 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass41701e82021-01-12 17:44:44 +00001106 Continue For Loop If "${olt_sn}"!="${src['olt']}"
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001107 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass41701e82021-01-12 17:44:44 +00001108 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +00001109 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301110 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +00001111 ... ${of_id} ${src['uni_id']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301112 ${matched}= Match ONU in PON OLT Peer List ${olt_peer_list} ${onu_device_id}
1113 Run Keyword If ${matched}
1114 ... Run Keywords
1115 # Perform Cleanup
1116 ... Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
1117 # Verify ONU port status
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001118 ... AND Wait Until Keyword Succeeds 120s 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +00001119 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001120 ... AND Wait Until Keyword Succeeds ${timeout} 2
TorstenThieme4e2168e2021-06-22 14:01:47 +00001121 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301122 ... volt-add-subscriber-access ${of_id} ${onu_port}
1123 # Verify ONU state in voltha
1124 ... AND Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1125 ... Validate Device ENABLED ACTIVE REACHABLE
1126 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
1127 # Verify subscriber access flows are added for the ONU port
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001128 ... AND Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301129 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1130 ... ${onu_port} ${nni_port} ${src['s_tag']}
1131 ... AND Run Keyword If ${has_dataplane}
1132 ... Run Keyword And Continue On Failure Validate DHCP and Ping True
1133 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
1134 ... ${src['ip']} ${src['user']} ${src['pass']}
1135 ... ${src['container_type']} ${src['container_name']}
1136 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1137 ... ${dst['container_type']} ${dst['container_name']}
1138 ... ELSE
1139 ... Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +00001140 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass16cdf962020-04-29 15:26:50 +05301141 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1142 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
1143 ... ${src['container_name']}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301144 END
1145
1146Match ONU in PON OLT Peer List
1147 [Arguments] ${olt_peer_list} ${onu_device_id}
1148 [Documentation] This keyword matches if ONU device is present in OLT PON port peer list
1149 ${matched}= Set Variable False
1150 FOR ${olt_peer} IN @{olt_peer_list}
1151 ${matched}= Set Variable If '${onu_device_id}' == '${olt_peer}' True False
1152 Exit For Loop If ${matched}
1153 END
1154 [Return] ${matched}
1155
Gayathri.Selvanb6a2b542020-01-24 07:24:23 +00001156Collect Logs
1157 [Documentation] Collect Logs from voltha and onos cli for various commands
1158 Run Keyword and Ignore Error Get Device List from Voltha
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001159 FOR ${I} IN RANGE 0 ${num_olts}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001160 Run Keyword and Ignore Error Get Device Output from Voltha ${olt_ids}[${I}][device_id]
1161 Run Keyword and Ignore Error Get Logical Device Output from Voltha ${olt_ids}[${I}][logical_id]
1162 END
1163 #Run Keyword and Ignore Error Get Device Output from Voltha ${olt_device_id}
1164 #Run Keyword and Ignore Error Get Logical Device Output from Voltha ${logical_id}
ubuntu6b6e7d42020-03-02 12:35:42 -08001165 Get ONOS Status ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001166
Hardik Windlassb75cf1b2021-01-18 06:59:09 +00001167Verify ping is successful except for given device
1168 [Arguments] ${num_onus} ${exceptional_onu}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001169 [Documentation] Checks that ping for all the devices are successful except the given ONU.
1170 ${pingStatus} Set Variable True
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001171 FOR ${I} IN RANGE 0 ${num_all_onus}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001172 ${src}= Set Variable ${hosts.src[${I}]}
1173 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +00001174 ${pingStatus} Run Keyword If '${src['onu']}' == '${exceptional_onu}' Set Variable False
Suchitra Vemuri69bcad22020-12-09 11:11:14 -08001175 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
1176 ... Wait Until Keyword Succeeds 60s 2s
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +00001177 ... Check Ping ${pingStatus} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1178 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1179 END
Andy Bavier4a8450e2020-02-04 08:58:37 -07001180
Suchitra Vemurife309412020-12-01 19:19:52 -08001181Verify ping is successful for ONUs not on this OLT
1182 [Arguments] ${num_all_onus} ${exceptional_olt_id}
1183 [Documentation] Checks that pings work for all the ONUs except for the ONUs on the given OLT.
1184 #${pingStatus} Set Variable True
1185 FOR ${I} IN RANGE 0 ${num_all_onus}
1186 ${src}= Set Variable ${hosts.src[${I}]}
1187 ${dst}= Set Variable ${hosts.dst[${I}]}
1188 ${olt_device_id}= Get Device ID From SN ${src['olt']}
1189 Continue For Loop If "${olt_device_id}"=="${exceptional_olt_id}"
1190 #${pingStatus} Run Keyword If '${olt_device_id}' == '${exceptional_olt_id}' Set Variable False
Suchitra Vemuri69bcad22020-12-09 11:11:14 -08001191 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
1192 ... Wait Until Keyword Succeeds 60s 2s
Suchitra Vemurife309412020-12-01 19:19:52 -08001193 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
1194 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1195 END
1196
Andy Bavier1923ecc2020-06-18 14:06:40 -07001197Echo Message to OLT Logs
1198 [Arguments] ${message}
1199 [Documentation] Echoes ${message} into the OLT logs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001200 FOR ${I} IN RANGE 0 ${num_olts}
1201 ${olt_user} Evaluate ${olts}[${I}].get("user")
1202 ${olt_pass} Evaluate ${olts}[${I}].get("pass")
1203 ${olt_ssh_ip} Evaluate ${olts}[${I}].get("sship")
TorstenThieme10bddb42022-05-02 12:28:00 +00001204 ${olt_type} Evaluate ${olts}[${I}].get("type")
Andrea Campanellaebf6f0d2021-01-12 13:10:29 +01001205 Continue For Loop If "${olt_user}" == "${None}"
1206 Continue For Loop If "${olt_pass}" == "${None}"
TorstenThieme10bddb42022-05-02 12:28:00 +00001207 ${command_timeout}= Set Variable If "${olt_type}"=="adtranolt" 300s 180s
1208 Wait Until Keyword Succeeds ${command_timeout} 10s Execute Remote Command
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001209 ... printf '%s\n' '' '' '${message}' '' >> /var/log/openolt.log
1210 ... ${olt_ssh_ip} ${olt_user} ${olt_pass}
TorstenThieme10bddb42022-05-02 12:28:00 +00001211 Wait Until Keyword Succeeds ${command_timeout} 10s Execute Remote Command
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001212 ... printf '%s\n' '' '' '${message}' '' >> /var/log/dev_mgmt_daemon.log
1213 ... ${olt_ssh_ip} ${olt_user} ${olt_pass}
TorstenThieme10bddb42022-05-02 12:28:00 +00001214 Wait Until Keyword Succeeds ${command_timeout} 10s Execute Remote Command
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001215 ... printf '%s\n' '' '' '${message}' '' >> /var/log/openolt_process_watchdog.log
1216 ... ${olt_ssh_ip} ${olt_user} ${olt_pass}
1217 END
Andy Bavier1923ecc2020-06-18 14:06:40 -07001218
Andy Bavierabeba262020-02-07 16:22:16 -07001219Start Logging
1220 [Arguments] ${label}
1221 [Documentation] Start logging for test ${label}
Hardik Windlass9e3db232021-10-14 07:10:47 +00001222 ${kail_process}= Run Keyword If "${container_log_dir}" != "${None}" Start Process kail -n ${NAMESPACE}
Hardik Windlassa9a896a2021-11-23 04:31:51 +00001223 ... -n ${INFRA_NAMESPACE} cwd=${container_log_dir} stdout=${label}-combined.log
Andy Bavierabeba262020-02-07 16:22:16 -07001224 Set Test Variable ${kail_process}
Andy Bavier1923ecc2020-06-18 14:06:40 -07001225 Run Keyword If ${has_dataplane} Echo Message to OLT Logs START ${label}
Andy Bavierabeba262020-02-07 16:22:16 -07001226
Andrea Campanella82add372021-11-05 12:01:15 +01001227Start Logging Setup or Teardown
1228 [Arguments] ${label}
1229 [Documentation] Start logging for suite ${label}
Matteo Scandolo6a90bda2021-11-30 11:31:38 -08001230 ${file}= Replace String ${label} ${SPACE} -
Andrea Campanella82add372021-11-05 12:01:15 +01001231 ${kail_process}= Run Keyword If "${container_log_dir}" != "${None}" Start Process kail -n ${NAMESPACE}
Matteo Scandolo6a90bda2021-11-30 11:31:38 -08001232 ... -n ${INFRA_NAMESPACE} cwd=${container_log_dir} stdout=${file}-combined.log
Andrea Campanella82add372021-11-05 12:01:15 +01001233 Set Suite Variable ${kail_process}
1234 Run Keyword If ${has_dataplane} Echo Message to OLT Logs START ${label}
1235
1236Stop Logging Setup or Teardown
1237 [Arguments] ${label}
1238 [Documentation] End logging for suite;
1239 Run sync
1240 Run Keyword If ${kail_process} Terminate Process ${kail_process}
1241 ${test_logfile}= Run Keyword If "${container_log_dir}" != "${None}"
1242 ... Join Path ${container_log_dir} ${label}-combined.log
1243 Run Keyword If ${has_dataplane} Echo Message to OLT Logs END ${label}
1244
Andy Bavierabeba262020-02-07 16:22:16 -07001245Stop Logging
1246 [Arguments] ${label}
Matteo Scandoloda1c64b2021-07-20 10:14:49 -07001247 [Documentation] End logging for test; remove logfile if test passed and ${logging} is set to False
Andy Bavierabeba262020-02-07 16:22:16 -07001248 Run sync
1249 Run Keyword If ${kail_process} Terminate Process ${kail_process}
1250 ${test_logfile}= Run Keyword If "${container_log_dir}" != "${None}"
1251 ... Join Path ${container_log_dir} ${label}-combined.log
Matteo Scandoloda1c64b2021-07-20 10:14:49 -07001252 Run Keyword If Test Passed
1253 ... Run Keyword If "${logging}" == "False"
1254 ... Run Keyword If "${test_logfile}" != "${None}"
1255 ... Remove File ${test_logfile}
Andy Bavier1923ecc2020-06-18 14:06:40 -07001256 Run Keyword If ${has_dataplane} Echo Message to OLT Logs END ${label}
Andy Bavierabeba262020-02-07 16:22:16 -07001257
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001258Clean Up Linux
1259 [Documentation] Kill processes and clean up interfaces on src+dst servers
Hardik Windlass16cdf962020-04-29 15:26:50 +05301260 [Arguments] ${onu_id}=${EMPTY}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001261 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001262 ${src}= Set Variable ${hosts.src[${I}]}
1263 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlass16cdf962020-04-29 15:26:50 +05301264 ${onu_device_id}= Get Device ID From SN ${src['onu']}
1265 Continue For Loop If '${onu_id}' != '${EMPTY}' and '${onu_id}' != '${onu_device_id}'
Andy Bavier84b83282020-06-30 05:47:49 -07001266 Execute Remote Command sudo pkill wpa_supplicant ${src['ip']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001267 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andy Bavier84b83282020-06-30 05:47:49 -07001268 Execute Remote Command sudo pkill dhclient ${src['ip']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001269 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andy Baviereff938d2020-06-29 18:27:49 -07001270 Execute Remote Command sudo pkill mausezahn ${src['ip']}
1271 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1272 Run Keyword If '${dst['ip']}' != '${None}' Execute Remote Command pkill dhcpd
1273 ... ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001274 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
1275 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1276 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
1277 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1278 ... ${dst['container_type']} ${dst['container_name']}
Andy Bavier84b83282020-06-30 05:47:49 -07001279 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
1280 ${bng_user}= Get Variable Value ${dst['noroot_user']}
1281 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
Andy Bavierf4b7d1d2020-06-30 11:14:04 -07001282 Run Keyword If "${bng_ip}" != "${NONE}" and "${bng_user}" != "${NONE}" and "${bng_pass}" != "${NONE}"
1283 ... Execute Remote Command sudo pkill mausezahn ${bng_ip} ${bng_user} ${bng_pass}
Andy Baviereff938d2020-06-29 18:27:49 -07001284 ... ${dst['container_type']} ${dst['container_name']}
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -08001285 END
Scott Baker60e570d2020-02-02 22:10:13 -08001286
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001287Clean Up Linux Per OLT
1288 [Documentation] Kill processes and clean up interfaces on src+dst servers
1289 [Arguments] ${olt_serial_number}
1290 FOR ${I} IN RANGE 0 ${num_all_onus}
1291 ${src}= Set Variable ${hosts.src[${I}]}
1292 ${dst}= Set Variable ${hosts.dst[${I}]}
1293 ${onu_device_id}= Get Device ID From SN ${src['onu']}
1294 ${sn}= Get Device ID From SN ${src['olt']}
1295 #Continue For Loop If '${onu_id}' != '${EMPTY}' and '${onu_id}' != '${onu_device_id}'
1296 Continue For Loop If '${olt_serial_number}' == '${sn}'
1297 Execute Remote Command sudo pkill wpa_supplicant ${src['ip']}
1298 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1299 Execute Remote Command sudo pkill dhclient ${src['ip']}
1300 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1301 Execute Remote Command sudo pkill mausezahn ${src['ip']}
1302 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1303 Run Keyword If '${dst['ip']}' != '${None}' Execute Remote Command pkill dhcpd
1304 ... ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
1305 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
1306 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1307 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
1308 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
1309 ... ${dst['container_type']} ${dst['container_name']}
1310 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
1311 ${bng_user}= Get Variable Value ${dst['noroot_user']}
1312 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
1313 Run Keyword If "${bng_ip}" != "${NONE}" and "${bng_user}" != "${NONE}" and "${bng_pass}" != "${NONE}"
1314 ... Execute Remote Command sudo pkill mausezahn ${bng_ip} ${bng_user} ${bng_pass}
1315 ... ${dst['container_type']} ${dst['container_name']}
1316 END
1317
Suchitra Vemuri8d3b0032020-09-11 17:49:08 -07001318Clean dhclient
1319 [Documentation] Kills dhclient processes only for all RGs
Hardik Windlass41701e82021-01-12 17:44:44 +00001320 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri8d3b0032020-09-11 17:49:08 -07001321 ${src}= Set Variable ${hosts.src[${I}]}
1322 ${dst}= Set Variable ${hosts.dst[${I}]}
1323 Execute Remote Command sudo pkill dhclient ${src['ip']}
1324 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1325 END
1326
Suchitra Vemurif7a033c2020-02-26 17:22:41 -08001327Clean WPA Process
1328 [Documentation] Kills wpa_supplicant processes only for all RGs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001329 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemurif7a033c2020-02-26 17:22:41 -08001330 ${src}= Set Variable ${hosts.src[${I}]}
1331 ${dst}= Set Variable ${hosts.dst[${I}]}
1332 Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src['ip']}
1333 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1334 END
1335
Scott Baker60e570d2020-02-02 22:10:13 -08001336Should Be Larger Than
1337 [Documentation] Verify that value_1 is > value_2
1338 [Arguments] ${value_1} ${value_2}
1339 Run Keyword If ${value_1} <= ${value_2}
1340 ... Fail The value ${value_1} is not larger than ${value_2}
1341
Scott Bakeree675552020-02-11 10:43:34 -08001342Should Be Larger Than Or Equal To
1343 [Documentation] Verify that value_1 is >= value_2
1344 [Arguments] ${value_1} ${value_2}
1345 Run Keyword If ${value_1} < ${value_2}
1346 ... Fail The value ${value_1} is not larger than or equal to ${value_2}
1347
Huseyin Ahmet AYDIN175d1582021-11-23 14:51:41 +00001348Should Be Lower Than
1349 [Documentation] Verify that value_1 is < value_2
1350 [Arguments] ${value_1} ${value_2}
1351 Run Keyword If ${value_1} >= ${value_2}
1352 ... Fail The value ${value_1} is not lower than ${value_2}
1353
Scott Baker60e570d2020-02-02 22:10:13 -08001354Should Be Float
1355 [Documentation] Verify that value is a floating point number type
1356 [Arguments] ${value}
1357 ${type} Evaluate type(${value}).__name__
1358 Should Be Equal ${type} float
1359
Scott Bakeree675552020-02-11 10:43:34 -08001360Should Be Newer Than Or Equal To
1361 [Documentation] Compare two RFC3339 dates
1362 [Arguments] ${value_1} ${value_2}
1363 ${unix_v1} Parse RFC3339 ${value_1}
1364 ${unix_v2} Parse RFC3339 ${value_2}
1365 Run Keyword If ${unix_v1} < ${unix_v2}
1366 ... Fail The value ${value_1} is not newer than or equal to ${value_2}
1367
Scott Baker60e570d2020-02-02 22:10:13 -08001368Get Current Time
1369 [Documentation] Return the current time in RFC3339 format
1370 ${output}= Run date -u +"%FT%T%:z"
1371 [return] ${output}
Scott Bakeree675552020-02-11 10:43:34 -08001372
1373Parse RFC3339
1374 [Documentation] Parse an RFC3339 timestamp
1375 [Arguments] ${dateStr}
1376 ${rc} ${output}= Run and Return Rc and Output date --date="${dateStr}" "+%s"
1377 Should Be Equal As Numbers ${rc} 0
1378 [return] ${output}
Matteo Scandolo142e6272020-04-29 17:36:59 -07001379
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001380Get Bandwidth Profile Name For Given Subscriber
Hardik Windlass35db2aa2021-06-03 12:41:26 +00001381 [Arguments] ${subscriber_id} ${stream_type}=upstreamBandwidthProfile ${service_type}=${EMPTY}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001382 [Documentation] Keyword to get the bandwidth details of the given subscriber
Hardik Windlass35db2aa2021-06-03 12:41:26 +00001383 ${service_type_upper}= Run Keyword If '${service_type}' != '${EMPTY}'
1384 ... Convert To Upper Case ${service_type}
1385 ${bandwidth_profile_output}= Run Keyword If '${service_type}' != '${EMPTY}'
TorstenThieme4e2168e2021-06-22 14:01:47 +00001386 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass1189a642021-06-04 03:25:23 +00001387 ... volt-programmed-subscribers | grep ${subscriber_id} | grep '${service_type_upper}' --color=never
Hardik Windlass35db2aa2021-06-03 12:41:26 +00001388 ... ELSE
TorstenThieme4e2168e2021-06-22 14:01:47 +00001389 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001390 ... volt-programmed-subscribers | grep ${subscriber_id}
1391 @{bandwidth_profile_array}= Split String ${bandwidth_profile_output} ,
1392 Log ${bandwidth_profile_array}
1393 FOR ${value} IN @{bandwidth_profile_array}
1394 @{row_value}= Split String ${value} =
1395 ${bandwidth_profile_name}= Set Variable If '${row_value[0]}' == ' ${stream_type}'
1396 ... ${row_value[1]}
1397 ${bandwidth_profile_name}= Convert To String ${bandwidth_profile_name}
1398 Run Keyword If "${bandwidth_profile_name}" != "None" Exit For Loop
1399 END
1400 Log ${bandwidth_profile_name}
1401 [Return] ${bandwidth_profile_name}
1402
1403Execute Remote Command
1404 [Documentation] SSH into a remote host and execute a command on the bare host or in a container.
1405 ... This replaces and simplifies the Login And Run Command On Remote System keyword in CORDRobot.
1406 [Arguments] ${cmd} ${ip} ${user} ${pass}=${None}
Andy Baviereff938d2020-06-29 18:27:49 -07001407 ... ${container_type}=${None} ${container_name}=${None} ${timeout}=${None}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001408 ${conn_id}= SSHLibrary.Open Connection ${ip}
1409 Run Keyword If '${pass}' != '${None}'
1410 ... SSHLibrary.Login ${user} ${pass}
1411 ... ELSE
1412 ... SSHLibrary.Login With Public Key ${user} %{HOME}/.ssh/id_rsa
1413 ${namespace}= Run Keyword If '${container_type}' == 'K8S' SSHLibrary.Execute Command
1414 ... kubectl get pods --all-namespaces | grep ${container_name} | awk '{print $1}'
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001415 ${stdout} ${stderr} ${rc}= Run Keyword If '${container_type}' == 'LXC'
Cristina de Francisco4d1c6802024-11-22 09:13:02 +01001416 ... SSHLibrary.Execute Command lxc exec ${container_name} -- bash -c "${cmd}"
Andy Baviereff938d2020-06-29 18:27:49 -07001417 ... return_stderr=True return_rc=True timeout=${timeout}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001418 ... ELSE IF '${container_type}' == 'K8S'
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001419 ... SSHLibrary.Execute Command kubectl -n ${namespace} exec ${container_name} -- ${cmd}
Andy Baviereff938d2020-06-29 18:27:49 -07001420 ... return_stderr=True return_rc=True timeout=${timeout}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001421 ... ELSE
Andy Baviereff938d2020-06-29 18:27:49 -07001422 ... SSHLibrary.Execute Command ${cmd} return_stderr=True return_rc=True timeout=${timeout}
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001423
1424 Log ${stdout}
1425 Log ${stderr}
1426 Log ${rc}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001427 SSHLibrary.Close Connection
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001428 [Return] ${stdout} ${stderr} ${rc}
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001429
Suraj Gour33651272020-05-04 10:10:16 +05301430Start Remote Command
1431 [Documentation] SSH into a remote host and execute a command on the bare host or in a container.
1432 ... This replaces and simplifies the Login And Run Command On Remote System keyword in CORDRobot.
1433 [Arguments] ${cmd} ${ip} ${user} ${pass}=${None}
1434 ... ${container_type}=${None} ${container_name}=${None}
1435 ${conn_id}= SSHLibrary.Open Connection ${ip}
1436 Run Keyword If '${pass}' != '${None}'
1437 ... SSHLibrary.Login ${user} ${pass}
1438 ... ELSE
1439 ... SSHLibrary.Login With Public Key ${user} %{HOME}/.ssh/id_rsa
1440 ${namespace}= Run Keyword If '${container_type}' == 'K8S' SSHLibrary.Execute Command
1441 ... kubectl get pods --all-namespaces | grep ${container_name} | awk '{print $1}'
1442 Run Keyword If '${container_type}' == 'LXC'
1443 ... SSHLibrary.Start Command lxc exec ${container_name} -- ${cmd}
1444 ... ELSE IF '${container_type}' == 'K8S'
1445 ... SSHLibrary.Start Command kubectl -n ${namespace} exec ${container_name} -- ${cmd}
1446 ... ELSE
1447 ... SSHLibrary.Start Command ${cmd}
Andy Bavier9fb23232020-06-30 15:12:20 -07001448 # It seems that closing the connection immediately will sometimes kill the command
1449 Sleep 1s
Suraj Gour33651272020-05-04 10:10:16 +05301450 SSHLibrary.Close Connection
1451
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001452Run Iperf3 Test Client
1453 [Arguments] ${src} ${server} ${args}
1454 [Documentation] Login to ${src} and run the iperf3 client against ${server} using ${args}.
1455 ... Return a Dictionary containing the results of the test.
Girish Gowdrad769b412021-05-16 11:09:46 -07001456 ${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 +00001457 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andy Bavierf6ab19c2020-05-14 10:34:47 -07001458 Should Be Equal As Integers ${rc} 0
Gayathri.Selvan92d16862020-03-19 14:47:58 +00001459 ${object}= Evaluate json.loads(r'''${output}''') json
1460 [Return] ${object}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001461
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -07001462Run Iperf Test Client for MCAST
1463 [Arguments] ${src} ${server} ${args}
1464 [Documentation] Login to ${src} and run the iperf client against ${server} using ${args}.
1465 ... Return a Dictionary containing the results of the test.
1466 ${output} ${stderr} ${rc}= Execute Remote Command sudo iperf -c ${server} ${args} | jq -M -c '.'
1467 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
1468 Should Be Equal As Integers ${rc} 0
1469 ${object}= Evaluate json.loads(r'''${output}''') json
1470 [Return] ${object}
1471
Hardik Windlassd19af862021-08-12 11:40:20 +00001472Run Ping In Background
1473 [Arguments] ${output_file} ${dst_ip} ${iface} ${ip} ${user} ${pass}=${None}
1474 ... ${container_type}=${None} ${container_name}=${None}
1475 [Documentation] Runs the 'ping' on remote system in background and stores the result in a file
1476 ${result}= Login And Run Command On Remote System
Hardik Windlass4e0e7c12021-08-26 08:07:35 +00001477 ... echo "ping -I ${iface} ${dst_ip} > ${output_file} &" > ping.sh; chmod +x ping.sh; ./ping.sh
Hardik Windlassd19af862021-08-12 11:40:20 +00001478 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
1479 Log ${result}
1480
1481Stop Ping Running In Background
1482 [Arguments] ${ip} ${user} ${pass}=${None}
1483 ... ${container_type}=${None} ${container_name}=${None}
1484 [Documentation] Stops the 'ping' running in background on remote system
Hardik Windlassa04efa52021-08-13 08:17:24 +00001485 ${cmd}= Run Keyword If '${container_type}' == 'LXC' or '${container_type}' == 'K8S'
1486 ... Set Variable kill -SIGINT `pgrep ping`
1487 ... ELSE
1488 ... Set Variable sudo kill -SIGINT `pgrep ping`
Hardik Windlassd19af862021-08-12 11:40:20 +00001489 ${result}= Login And Run Command On Remote System
Hardik Windlassa04efa52021-08-13 08:17:24 +00001490 ... ${cmd} ${ip} ${user} ${pass} ${container_type} ${container_name}
Hardik Windlassd19af862021-08-12 11:40:20 +00001491 Log ${result}
1492
1493Retrieve Remote File Contents
1494 [Documentation] Retrieves the contents of the file on remote system
1495 [Arguments] ${file} ${ip} ${user} ${pass}=${None}
1496 ... ${container_type}=${None} ${container_name}=${None} ${prompt}=~$
1497 ${output}= Login And Run Command On Remote System
1498 ... cat ${file}
1499 ... ${ip} ${user} ${pass} ${container_type} ${container_name} ${prompt}
1500 [Return] ${output}
1501
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001502RestoreONUs
1503 [Documentation] Restore all connected ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -08001504 [Arguments] ${num_all_onus}
1505 FOR ${I} IN RANGE 0 ${num_all_onus}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001506 ${src}= Set Variable ${hosts.src[${I}]}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001507 ${container_type}= Get Variable Value ${src['container_type']} "null"
1508 ${container_name}= Get Variable Value ${src['container_name']} "null"
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001509 ${onu_type}= Get Variable Value ${src['onu_type']} "null"
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001510 #Get ens6f0 from ens6f0.22
1511 ${if_name}= Replace String Using Regexp ${src['dp_iface_name']} \\..* \
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001512 Run Keyword IF '${onu_type}' == 'alpha' AlphaONURestoreDefault ${src['ip']} ${src['user']}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001513 ... ${src['pass']} ${if_name} admin admin ${container_type} ${container_name}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001514 END
1515
1516AlphaONURestoreDefault
1517 [Documentation] Restore the Alpha ONU to factory setting
1518 [Arguments] ${rg_ip} ${rg_user} ${rg_pass} ${onu_ifname}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001519 ... ${onu_user} ${onu_pass} ${container_type}=${None} ${container_name}=${None}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001520 ${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 -07001521 ... ${rg_ip} ${rg_user} ${rg_pass} ${container_type} ${container_name}
TorstenThieme70bc5262021-01-19 12:12:55 +00001522 ${cmd} Catenate
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001523 ... (echo open "192.168.1.1"; sleep 1;
1524 ... echo "${onu_user}"; sleep 1;
1525 ... echo "${onu_pass}"; sleep 1;
1526 ... echo "restoredefault"; sleep 1) | telnet
1527 ${output}= Login And Run Command On Remote System ${cmd}
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001528 ... ${rg_ip} ${rg_user} ${rg_pass} ${container_type} ${container_name}
Hung-Wei Chiue0bec7c2020-05-29 22:16:56 +00001529 Log To Console ${output}
1530 ${output}= Login And Run Command On Remote System sudo ifconfig ${onu_ifname} 0
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -07001531 ... ${rg_ip} ${rg_user} ${rg_pass} ${container_type} ${container_name}
Suraj Gour33651272020-05-04 10:10:16 +05301532
1533Create traffic with each pbit and capture at other end
1534 [Documentation] Generates upstream traffic using Mausezahn tool
1535 ... with each pbit and validates reception at other end using tcpdump
1536 [Arguments] ${target_ip} ${target_iface} ${src_iface}
Girish Gowdra66cd95d2021-07-08 10:31:54 -07001537 ... ${packet_count} ${packet_type} ${c_vlan} ${s_vlan} ${direction} ${tcpdump_filter}
Suraj Gour33651272020-05-04 10:10:16 +05301538 ... ${dst_ip} ${dst_user} ${dst_pass} ${dst_container_type} ${dst_container_name}
1539 ... ${src_ip} ${src_user} ${src_pass} ${src_container_type} ${src_container_name}
1540 FOR ${pbit} IN RANGE 8
Andy Baviereff938d2020-06-29 18:27:49 -07001541 Execute Remote Command sudo pkill mausezahn
Suraj Gour33651272020-05-04 10:10:16 +05301542 ... ${src_ip} ${src_user} ${src_pass} ${src_container_type} ${src_container_name}
Girish Gowdrabbfbbc32021-05-17 14:36:58 -07001543 ${var1}= Set Variable sudo mausezahn ${src_iface} -B ${target_ip} -c ${packet_count}
Girish Gowdra66cd95d2021-07-08 10:31:54 -07001544 ${var2}= Run Keyword If "${direction}"=="downstream"
1545 ... Set Variable -t ${packet_type} "dp=80, flags=rst, p=aa:aa:aa" -Q ${pbit}:${s_vlan},${pbit}:${c_vlan}
1546 ... ELSE
1547 ... Set Variable -t ${packet_type} "dp=80, flags=rst, p=aa:aa:aa" -Q ${pbit}:${c_vlan}
Suraj Gour33651272020-05-04 10:10:16 +05301548 ${cmd}= Set Variable ${var1} ${var2}
1549 Start Remote Command ${cmd} ${src_ip} ${src_user} ${src_pass}
1550 ... ${src_container_type} ${src_container_name}
1551 ${output} ${stderr} ${rc}= Execute Remote Command
Andy Baviereff938d2020-06-29 18:27:49 -07001552 ... sudo tcpdump -l -U -c 30 -i ${target_iface} -e ${tcpdump_filter}
Suraj Gour33651272020-05-04 10:10:16 +05301553 ... ${dst_ip} ${dst_user} ${dst_pass} ${dst_container_type} ${dst_container_name}
Andy Baviereff938d2020-06-29 18:27:49 -07001554 ... timeout=30 seconds
1555 Execute Remote Command sudo pkill mausezahn
Suraj Gour33651272020-05-04 10:10:16 +05301556 ... ${src_ip} ${src_user} ${src_pass} ${src_container_type} ${src_container_name}
Girish Gowdrabbfbbc32021-05-17 14:36:58 -07001557 Run Keyword If "${tcpdump_filter}"=="tcp"
Girish Gowdraebeca682021-05-18 14:44:41 -07001558 ... Should Match Regexp ${output} , p ${pbit},
Suraj Gour33651272020-05-04 10:10:16 +05301559 END
TorstenThieme70bc5262021-01-19 12:12:55 +00001560
1561Determine Number Of ONU
1562 [Arguments] ${olt_serial_number}=${EMPTY} ${num_onus}=${num_all_onus}
1563 [Documentation] Determine the number of different ONUs for the given OLT taken from host.src
1564 ${onu_list} Create List
1565 FOR ${INDEX} IN RANGE 0 ${num_onus}
1566 Continue For Loop If "${olt_serial_number}"!="${hosts.src[${INDEX}].olt}" and "${olt_serial_number}"!="${EMPTY}"
1567 ${onu_id}= Get Index From List ${onu_list} ${hosts.src[${INDEX}].onu}
1568 Run Keyword If -1 == ${onu_id} Append To List ${onu_list} ${hosts.src[${INDEX}].onu}
1569 END
1570 ${real_num_onus}= Get Length ${onu_list}
1571 [Return] ${real_num_onus}
Hardik Windlass44abec12021-09-27 07:52:33 +00001572
1573Validate Cleanup In ETCD
1574 [Documentation] The keyword verifies that device, ports, flows, meters are all cleared in ETCD
Andrea Campanella388cd872022-02-10 09:11:39 +01001575 [Arguments] ${namespace}=default ${defaultkvstoreprefix}=voltha/voltha_voltha
Hardik Windlass44abec12021-09-27 07:52:33 +00001576 ${podname}= Set Variable etcd
1577 ${kvstoreprefix}= Get Kv Store Prefix ${defaultkvstoreprefix}
1578 # Log Devices Output and Verify Output Should be Empty
1579 ${commandget}= Catenate
1580 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/devices --keys-only'
1581 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1582 Log ${result}
1583 Should Be Empty ${result} Stale Devices Data in Etcd!
1584 # Log Flows Output and Verify Output Should be Empty
1585 ${commandget}= Catenate
1586 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/flows --keys-only'
1587 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1588 Log ${result}
1589 Should Be Empty ${result} Stale Flows Data in Etcd!
1590 # Log LogicalDevices Output and Verify Output Should be Empty
1591 ${commandget}= Catenate
1592 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_devices --keys-only'
1593 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1594 Log ${result}
1595 Should Be Empty ${result} Stale Logical Devices Data in Etcd!
1596 # Log LogicalFlows Output and Verify Output Should be Empty
1597 ${commandget}= Catenate
1598 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_flows --keys-only'
1599 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1600 Log ${result}
1601 Should Be Empty ${result} Stale Logical Flows Data in Etcd!
1602 # Log LogicalMeters Output and Verify Output Should be Empty
1603 ${commandget}= Catenate
1604 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_meters --keys-only'
1605 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1606 Log ${result}
1607 Should Be Empty ${result} Stale Logical Meters Data in Etcd!
1608 # Log LogicalPorts Output and Verify Output Should be Empty
1609 ${commandget}= Catenate
1610 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/logical_ports --keys-only'
1611 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1612 Log ${result}
1613 Should Be Empty ${result} Stale Logical Ports Data in Etcd!
1614 # Log Openolt Output and Verify Output Should be Empty
1615 ${commandget}= Catenate
1616 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/openolt --keys-only'
1617 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1618 Log ${result}
1619 Should Be Empty ${result} Stale Openolt Data in Etcd!
1620 # Log Openonu Output and Verify Output Should be Empty
1621 ${commandget}= Catenate
1622 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/openonu --keys-only'
1623 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1624 Log ${result}
1625 Should Be Empty ${result} Stale Openonu Data in Etcd!
1626 # Log Ports Output and Verify Output Should be Empty
1627 ${commandget}= Catenate
1628 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/ports --keys-only'
1629 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1630 Log ${result}
1631 Should Be Empty ${result} Stale Ports Data in Etcd!
1632 # Log ResourceInstances Output and Verify Output Should be Empty
1633 ${commandget}= Catenate
1634 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/resource_instances --keys-only'
1635 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1636 Log ${result}
1637 Should Be Empty ${result} Stale Resource Instances Data in Etcd!
1638 # Log ResourceManager Output and Verify Output Should be Empty
1639 ${commandget}= Catenate
1640 ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/${kvstoreprefix}/resource_manager --keys-only'
1641 ${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
1642 Log ${result}
1643 Should Be Empty ${result} Stale Resource Manager Data in Etcd!
Hardik Windlass81375222021-12-02 10:48:01 +00001644
Hardik Windlass81375222021-12-02 10:48:01 +00001645Clean Up All Nodes
1646 [Documentation] Login to each node and kill all stale lxc prcoesses
1647 ${num_nodes}= Get Length ${nodes}
1648 FOR ${I} IN RANGE 0 ${num_nodes}
1649 ${node_ip}= Evaluate ${nodes}[${I}].get("ip")
1650 ${node_user}= Evaluate ${nodes}[${I}].get("user")
1651 ${node_pass}= Evaluate ${nodes}[${I}].get("pass")
1652 Run Keyword And Continue On Failure Start Remote Command kill -9 `pidof lxc`
1653 ... ${node_ip} ${node_user} ${node_pass}
1654 END
Girish Gowdrafc0bdf22021-12-06 16:57:50 +05301655
1656Reboot XGSPON ONU
1657 [Documentation] Reboots the XGSPON ONU and verifies the ONU state after the reboot
1658 [Arguments] ${olt_sn} ${onu_sn} ${reason}
1659 FOR ${I} IN RANGE 0 ${num_olts}
1660 ${serial_number} Evaluate ${olts}[${I}].get("serial")
1661 Continue For Loop If "${serial_number}"!="${olt_sn}"
1662 ${board_tech} Evaluate ${olts}[${I}].get("board_technology")
1663 ${onu_device_id}= Get Device ID From SN ${onu_sn}
1664 Run Keyword If "${board_tech}"=="XGS-PON" Run Keywords
1665 ... Reboot Device ${onu_device_id}
1666 ... AND Wait Until Keyword Succeeds 120s 5s
1667 ... Validate Device ENABLED ACTIVE
1668 ... REACHABLE ${onu_sn} onu=True onu_reason=${reason}
1669 END
Girish Gowdra8fd96962021-12-14 16:20:04 +05301670
1671Set Non-Critical Tag for XGSPON Tech
1672 [Documentation] Dynamically sets the test tag for xgs-pon based to non-critical
1673 FOR ${I} IN RANGE 0 ${num_olts}
1674 ${board_tech} Evaluate ${olts}[${I}].get("board_technology")
1675 Run Keyword If "${board_tech}"=="XGS-PON" Run Keywords
1676 ... Set Tags non-critical
1677 ... AND Exit For Loop
1678 END
Hardik Windlassc4d1fd62022-04-12 13:12:28 +00001679
1680Perform Reboot ONUs and OLTs Physically
1681 [Documentation] This keyword reboots ONUs and OLTs physically
1682 ... It runs only on the PODs that are configured with PowerSwitch that
1683 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
1684 [Arguments] ${power_cycle_olt}=False
1685 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
1686 @{onu_list}= Create List
1687 FOR ${I} IN RANGE 0 ${num_all_onus}
1688 ${src}= Set Variable ${hosts.src[${I}]}
1689 ${dst}= Set Variable ${hosts.dst[${I}]}
1690 # If the power switch port is not specified, continue
1691 Continue For Loop If '${src["power_switch_port"]}' == '${None}'
1692 # Skip if we have already handled this ONU
1693 ${sn}= Set Variable ${src['onu']}
1694 ${onu_id}= Get Index From List ${onu_list} ${sn}
1695 Continue For Loop If -1 != ${onu_id}
1696 Append To List ${onu_list} ${sn}
1697 Disable Switch Outlet ${src['power_switch_port']}
1698 Sleep 10s
1699 Enable Switch Outlet ${src['power_switch_port']}
1700 END
1701 Pass Execution If '${power_cycle_olt}'=='False' Skipping OLT(s) Power Switch Reboot
1702 # Waiting extra time for the ONUs to come up
1703 Sleep 30s
1704 FOR ${I} IN RANGE 0 ${olt_count}
Hardik Windlass2cd43652022-04-21 16:44:06 +05301705 ${olt_serial_number}= Get From Dictionary ${list_olts}[${I}] sn
Hardik Windlassc4d1fd62022-04-12 13:12:28 +00001706 ${power_switch_port}= Get From Dictionary ${list_olts}[${I}] powerswitchport
1707 ${olt_ssh_ip}= Get From Dictionary ${list_olts}[${I}] sship
1708 # If the power switch port is not specified, continue
1709 Continue For Loop If '${power_switch_port}' == '${None}'
1710 Disable Switch Outlet ${power_switch_port}
1711 Sleep 10s
1712 Enable Switch Outlet ${power_switch_port}
1713 Run Keyword If ${has_dataplane} Wait Until Keyword Succeeds 120s 10s
1714 ... Check Remote System Reachability True ${olt_ssh_ip}
1715 END
1716 # Waiting extra time for the ONUs to come up
1717 Sleep 60s
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001718
1719Perform Sanity Test TIM
1720 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for TIM workflow
1721 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
1722 ... In all other (common) cases flag has to be set False (default).
1723 [Arguments] ${supress_add_subscriber}=False ${maclearning_enabled}=False
1724 FOR ${J} IN RANGE 0 ${num_olts}
1725 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
1726 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
1727 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1728 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
1729 ... ${olt_serial_number}
1730 Set Global Variable ${of_id}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001731 #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}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001735 #Scalability Test
1736 #Extract the total iphotetical number of UNIs that an OLT controll having multiple ONUs connected
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001737 ${num_of_provisioned_onus_ports}= Run Keyword If '${supress_add_subscriber}' == 'False'
1738 ... Count Number of UNI ports for OLT ${olt_serial_number} hsia
1739 ... ELSE Set Variable 0
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001740 # Verify ONOS Flows
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001741 ${onos_flows_count}= Run Keyword Calculate Tim flows
1742 ... ${num_of_provisioned_onus_ports} 1 true true true true
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001743 Run Keyword If '${supress_add_subscriber}' == 'False'
1744 ... Wait Until Keyword Succeeds ${timeout} 5s
1745 ... Verify Subscriber Access Flows Added Count TIM ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1746 ... ${onos_flows_count}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001747 # Verify VOLTHA Flows
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001748 ${olt_flows}= Run Keyword If '${supress_add_subscriber}' == 'False'
1749 ... Evaluate 6 * ${num_of_provisioned_onus_ports} + 3
1750 ... ELSE Set Variable 3
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001751 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
1752 ... ${olt_flows} ${olt_device_id}
1753 ${List_ONU_Serial} Create List
1754 Set Suite Variable ${List_ONU_Serial}
1755 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
1756 Log ${List_ONU_Serial}
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001757 # Number of per ONU Flows equals 6
1758 ${onu_flows}= Run Keyword If '${supress_add_subscriber}' == 'False'
1759 ... Set Variable 6
1760 ... ELSE Set Variable 0
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001761 Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
1762 ... ${List_ONU_Serial} ${onu_flows}
1763 END
1764
1765Count Number of UNI ports for OLT
1766 [Documentation] Count Provisioned UNI ports, for ONUs connected with specified OLT
1767 [Arguments] ${olt_serial_number} ${type_of_service}
1768 ${num_of_provisioned_onus_ports}= Evaluate 0
1769 FOR ${I} IN RANGE 0 ${num_all_onus}
1770 ${src}= Set Variable ${hosts.src[${I}]}
1771 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
1772 Continue For Loop If "${type_of_service}"!="${src['service_type']}"
1773 ${num_of_provisioned_onus_ports}= Evaluate ${num_of_provisioned_onus_ports} + 1
1774 END
1775 [Return] ${num_of_provisioned_onus_ports}
1776
1777
1778Perform Sanity Test TIM Per OLT
1779 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
1780 [Documentation] This keyword performs Sanity Test Procedure for TIM Workflow
1781 ... Sanity test performs pppoe and flows for all the ONUs (and for each UNIs of a consider ONU)
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001782 Wait Until Keyword Succeeds ${timeout} 5s
1783 ... Verify Downstream Flows for Single OLT NNI Port TIM ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1784 ... ${nni_port}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001785 FOR ${I} IN RANGE 0 ${num_all_onus}
1786 ${src}= Set Variable ${hosts.src[${I}]}
1787 ${dst}= Set Variable ${hosts.dst[${I}]}
1788 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001789 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
1790 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlass78bb0fd2022-06-21 15:11:54 +05301791 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001792 # Check ONU port is Enabled in ONOS
1793 Wait Until Keyword Succeeds 120s 2s
1794 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001795 # Subscribe a RG on a defualt UNI_id=1
1796 ${add_subscriber_access} = Set Variable volt-add-subscriber-access ${of_id} ${onu_port}
1797 Run Keyword If '${supress_add_subscriber}' == 'False'
1798 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${add_subscriber_access}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001799 # Verify ONU state in voltha
1800 ${onu_reasons}= Create List omci-flows-pushed
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001801 Run Keyword Append To List ${onu_reasons} initial-mib-downloaded
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001802 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
1803 ... ENABLED ACTIVE REACHABLE
1804 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001805 # Verify subscriber access flows are added for a single ONU onuport for the HSIA service
1806 Run Keyword If '${supress_add_subscriber}' == 'False' and '${src['service_type']}' == 'hsia'
1807 ... Wait Until Keyword Succeeds ${timeout} 5s
1808 ... Verify Subscriber Access Flows Added For HSIA Service Single ONU Port TIM
1809 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001810 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['uni_tag']}
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001811 # Verify subscriber access flows are added for a single ONU onuport for the VOD service
1812 Run Keyword If '${supress_add_subscriber}' == 'False' and '${src['service_type']}' == 'vod'
1813 ... Wait Until Keyword Succeeds ${timeout} 5s
1814 ... Verify Subscriber Access Flows Added For VoD Service On Single ONU Port TIM
1815 ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1816 ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['uni_tag']}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001817 # TO DO: Verify Meters in ONOS
LupoAndreaSperanza0f3fbc22023-05-16 21:02:40 +02001818 END
1819
1820Perform Sanity Test TIM MCAST
1821 [Documentation] This keyword iterate all OLTs and performs Sanity Test Procedure for MCAST TIM workflow
1822 ... Use BBSIM to subscribe on a MCast Group and verify flows and groups rules
1823 [Arguments] ${supress_add_subscriber}=False ${maclearning_enabled}=False
1824 Perform Sanity Test TIM ${supress_add_subscriber}
1825 ... ${maclearning_enabled}
1826 FOR ${J} IN RANGE 0 ${num_olts}
1827 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
1828 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
1829 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1830 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
1831 ... ${olt_serial_number}
1832 Set Global Variable ${of_id}
1833 #Permorm test on flow rules that are writen inside ONOS, OLT and ONUs
1834 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
1835 ${mCastSubIps}= Wait Until Keyword Succeeds ${timeout} 2s
1836 ... Perform Sanity Test TIM MCAST Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${num_onus}
1837 ... ${supress_add_subscriber}
1838 ${number_of_mCastSubIps} Get Length ${mCastSubIps}
1839 #Scalability Test
1840 ${num_of_provisioned_onus_ports}= Run Keyword If '${supress_add_subscriber}' == 'False'
1841 ... Count Number of UNI ports for OLT ${olt_serial_number} vod
1842 ... ELSE Set Variable 0
1843 # Verify ONOS Flows
1844 ${onos_flows_count}= Run Keyword Calculate Tim flows
1845 ... ${num_of_provisioned_onus_ports} 1 true true true true
1846 #Tot Number of Onos FLows with Mcast Downstream Flows
1847 ${onos_flows_count}= Evaluate ${number_of_mCastSubIps} + ${onos_flows_count}
1848 Run Keyword If '${supress_add_subscriber}' == 'False'
1849 ... Wait Until Keyword Succeeds ${timeout} 5s
1850 ... Verify Subscriber Access Flows Added Count TIM ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
1851 ... ${onos_flows_count}
1852 # Verify VOLTHA Flows
1853 ${olt_flows}= Run Keyword If '${supress_add_subscriber}' == 'False'
1854 ... Evaluate 6 * ${num_of_provisioned_onus_ports} + 3 + ${number_of_mCastSubIps}
1855 ... ELSE Set Variable 4
1856 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
1857 ... ${olt_flows} ${olt_device_id}
1858 ${List_ONU_Serial} Create List
1859 Set Suite Variable ${List_ONU_Serial}
1860 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number}
1861 Log ${List_ONU_Serial}
1862 # Number of per ONU Flows equals 6
1863 ${onu_flows}= Run Keyword If '${supress_add_subscriber}' == 'False'
1864 ... Set Variable 6
1865 ... ELSE Set Variable 0
1866 Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
1867 ... ${List_ONU_Serial} ${onu_flows}
1868 END
1869
1870Perform Sanity Test TIM MCAST Per OLT
1871 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}=False
1872 [Documentation] This keyword performs Sanity Test Procedure for TIM Workflow
1873 ... Sanity test performs pppoe and flows for all the ONUs (and for each UNIs of a consider ONU)
1874 @{subTotalMcast}= Create List
1875 FOR ${I} IN RANGE 0 ${num_all_onus}
1876 ${src}= Set Variable ${hosts.src[${I}]}
1877 ${dst}= Set Variable ${hosts.dst[${I}]}
1878 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
1879 Continue For Loop If "${src['service_type']}"!="vod"
1880 ${subMcast}= Set Variable ${src['subMcast']}
1881 #Maintain all the MCast Group subscribed by all ONU/ONT
1882 ${subTotalMcast}= Combine Lists ${subTotalMcast} ${subMcast}
1883 ${onu_device_id}= Get Device ID From SN ${src['onu']}
1884 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
1885 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
1886 Wait Until Keyword Succeeds ${timeout} 2s
1887 ... Perform Sanity Test TIM MCAST Per ONU ${NAMESPACE}
1888 ... ${olt_serial_number} ${src['onu']} ${src['uni_id']} join ${subMcast}
1889 ... ${onu_port} ${of_id} ${src['c_tag']}
1890 END
1891 ${subTotalMcast}= Remove Duplicates ${subTotalMcast}
1892 [Return] ${subTotalMcast}
1893
1894Perform Sanity Test TIM MCAST Per ONU
1895 [Documentation] Joins or Leaves Igmp on a BBSim ONU
1896 [Arguments] ${namespace} ${olt_serial_number} ${onu} ${uni} ${task} ${group_address_list}
1897 ... ${onu_port} ${olt_of_id} ${vlan}
1898 #Get the BBSIM, where there are the subscriber
1899 ${bbsim_pod_name}= Set Variable bbsim
1900 FOR ${J} IN RANGE 0 ${num_olts}
1901 ${bbsim_pod_name}= Set Variable If "${olt_serial_number}" == "${list_olts}[${J}][sn]"
1902 ... ${list_olts}[${J}][ip] ${bbsim_pod_name}
1903 END
1904 ${num_group_address_list} Get Length ${group_address_list}
1905 FOR ${I} IN RANGE 0 ${num_group_address_list}
1906 ${group_address}= Set Variable ${group_address_list[${I}]}
1907 JoinOrLeave Igmp ${NAMESPACE} ${bbsim_pod_name} ${onu} 0 ${task} ${group_address} ${vlan}
1908 ${downstram_flow_mcast_added}= Wait Until Keyword Succeeds ${timeout} 2s
1909 ... Verify Mcast Flow Rule Subscription ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
1910 ... ${olt_of_id} ${group_address}
1911 ${groupID}= Set Variable ${EMPTY}
1912 #Get the GroupID of the Downstream Flow from the Downstream Flow Rule
1913 ${groupID}= Get Substring ${downstram_flow_mcast_added} 147 -2
1914 #Verify if in Groups is add the correct groups rules with correct GroupID and UNI Port
1915 Verify Mcast Groups Rules generation ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
1916 ... ${onu_port} ${groupID}
Andrea Speranzaa8cf80b2022-05-26 10:09:59 +02001917 END
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001918
1919Perform Sanity Test of BBFadapter Aggregation
1920 [Documentation] This test verfy if each OLT and ONU viewed by the BBF-Adapter
1921 ... represent the device in Voltha
1922 ... (with the correct translation to and from ietf standard)
1923 [Arguments] ${XML} ${supress_add_subscriber}=False
1924 Log ${supress_add_subscriber}
1925 #Extract from the XML of the Device Aggregation different tipe of data structure
1926 #One for only OLTs, one for only ONUs and one for Both
1927 Set Global Variable ${XML}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001928 ALL DEVICES XML update From BBF ${XML} ${scripts}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001929 OLT XML update From BBF ${XML} ${scripts}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001930 #Do the verification for each OLT and its ONUs
1931 FOR ${J} IN RANGE 0 ${num_olts}
1932 ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
1933 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
1934 ${num_onus}= Set Variable ${list_olts}[${J}][onucount]
1935 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
1936 ... ${olt_serial_number}
1937 Set Global Variable ${of_id} ${olt_device_id}
1938 #Validate in VOLTHA if the OLT exist have the correct states
1939 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
1940 ... ENABLED ACTIVE REACHABLE
1941 ... ${olt_serial_number}
1942 #Validate in BBF if the OLT exist and have the correct states
1943 #State are defined in VOLTHA but internal translate in IETF standard
1944 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1945 ... Validate Olt in BBF ENABLED ACTIVE REACHABLE
1946 ... ${olt_serial_number} ${olt_device_id}
1947 #Verify if the OLT in BBF have all the features present in VOLTHA
1948 #Is like a Viceversa Check
1949 Correct representation check VOLTHA-IETF ${olt_serial_number} False
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001950 #NNI_port is a place_holder for future tests on services
1951 #Do a Test for the OLT configuration and its ONUS
1952 ${nni_port}= Set Variable 0
1953 Perform Sanity BBF Per OLT ${of_id} ${nni_port} ${olt_serial_number} ${num_onus}
1954 ... ${supress_add_subscriber}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001955 END
1956
1957Perform Sanity BBF Per OLT
1958 [Arguments] ${of_id} ${nni_port} ${olt_serial_number} ${num_onus} ${supress_add_subscriber}
1959 [Documentation] This keyword performs Sanity Test Procedure for BBF on Multiple Workflow
1960 ... This keyword can be used to call in any other tests where sanity check is required
1961 ... and avoids duplication of code.
1962 ... For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
1963 ... In all other (common) cases flag has to be set False (default).
1964 # Test all the ONUs of the consider OLT
1965 FOR ${I} IN RANGE 0 ${num_all_onus}
1966 ${src}= Set Variable ${hosts.src[${I}]}
1967 ${dst}= Set Variable ${hosts.dst[${I}]}
1968 Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
1969 ${onu_device_id}= Get Device ID From SN in BBF ${src['onu']}
1970 ${of_id}= Get ofID From OLT List ${src['olt']}
1971 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
1972 ... ${of_id} ${src['uni_id']}
1973 # Subscribe the ONU if not on repete sanity check
1974 Run Keyword If '${supress_add_subscriber}' == 'False' Wait Until Keyword Succeeds ${timeout} 2s
1975 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
1976 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
1977 # Verify ONU state in BBF
1978 ${onu_reasons}= Create List omci-flows-pushed
1979 #Run Keyword If ${supress_add_subscriber} Append To List ${onu_reasons} initial-mib-downloaded
1980 Log ${onu_reasons}
1981 Log ${supress_add_subscriber}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001982 ONU XML update From BBF ${XML} ${scripts}
Andrea Speranza8b6f46f2022-08-23 14:22:15 +02001983 #Validate in VOLTHA if the ONU exist and have the correct states
1984 Wait Until Keyword Succeeds ${timeout} 5s Validate Device
1985 ... ENABLED ACTIVE REACHABLE
1986 ... ${src['onu']} onu=True onu_reason=${onu_reasons}
1987 #Validate in BBF if the ONU exist have the correct states
1988 #State are defined in VOLTHA but internal translate in IETF standard
1989 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
1990 ... Validate Onu in BBF ENABLED ACTIVE REACHABLE
1991 ... ${src['onu']} ${onu_reasons}
1992 #Verify if the ONU in BBF have all the features present in VOLTHA
1993 #Is like a Viceversa Check
1994 Correct representation check VOLTHA-IETF ${src['onu']} True
1995 END
1996