blob: d00ed4621874401a1853de089ac5f5b60b0eea48 [file] [log] [blame]
TorstenThieme136ebf72021-02-26 14:27:07 +00001# Copyright 2021 - present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14# FIXME Can we use the same test against BBSim and Hardware?
15
16*** Settings ***
17Documentation Test various functional end-to-end scenarios for TT workflow
18Suite Setup Setup Suite
19Test Setup Setup
20Test Teardown Teardown
21Suite Teardown Teardown Suite
22Library Collections
23Library String
24Library OperatingSystem
25Library XML
26Library RequestsLibrary
27Library ../../libraries/DependencyLibrary.py
28Resource ../../libraries/onos.robot
29Resource ../../libraries/voltctl.robot
30Resource ../../libraries/voltha.robot
31Resource ../../libraries/utils.robot
32Resource ../../libraries/k8s.robot
33Resource ../../variables/variables.robot
34Resource ../../libraries/power_switch.robot
35
36*** Variables ***
37${POD_NAME} flex-ocp-cord
38${KUBERNETES_CONF} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
39${KUBERNETES_CONFIGS_DIR} ~/pod-configs/kubernetes-configs
40#${KUBERNETES_CONFIGS_DIR} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
41${KUBERNETES_YAML} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
42${HELM_CHARTS_DIR} ~/helm-charts
43${VOLTHA_POD_NUM} 8
44${NAMESPACE} voltha
Hardik Windlass4288c6a2021-09-28 07:22:06 +000045${INFRA_NAMESPACE} default
Matteo Scandoloa4e59522021-08-31 14:56:24 -070046${STACK_NAME} voltha
TorstenThieme136ebf72021-02-26 14:27:07 +000047# For below variable value, using deployment name as using grep for
48# parsing radius pod name, we can also use full radius pod name
49${RESTART_POD_NAME} radius
50${timeout} 60s
51${of_id} 0
52${logical_id} 0
53${has_dataplane} True
Hardik Windlass04896f62021-03-05 16:15:11 +053054${teardown_device} True
TorstenThieme136ebf72021-02-26 14:27:07 +000055${scripts} ../../scripts
56
57# Per-test logging on failure is turned off by default; set this variable to enable
58${container_log_dir} ${None}
59
Matteo Scandoloda1c64b2021-07-20 10:14:49 -070060# logging flag to enable Collect Logs, can be passed via the command line too
61# example: -v logging:False
62${logging} True
63
TorstenThieme136ebf72021-02-26 14:27:07 +000064${suppressaddsubscriber} True
65
66*** Test Cases ***
Hardik Windlass364ec452021-04-14 07:12:28 +000067Verify ONU after Rebooting Physically for TT
68 [Documentation] Test the ONU functionality by physically turning on/off ONU.
69 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityTT test was executed)
70 ... Test case runs only on the PODs that are configured with PowerSwitch that
71 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
72 [Tags] functionalTT PowerSwitchOnuRebootTT PowerSwitch
73 [Setup] Start Logging RebootOnu_PowerSwitch_TT
74 [Teardown] Run Keywords Collect Logs
Hardik Windlass364ec452021-04-14 07:12:28 +000075 ... AND Delete All Devices and Verify
Girish Gowdraf244d5b2021-09-01 17:16:16 -070076 ... AND Run Keyword If ${logging} Collect Logs
77 ... AND Stop Logging RebootOnu_PowerSwitch_TT
Hardik Windlass364ec452021-04-14 07:12:28 +000078 # Add OLT device
79 Setup
80 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
81 Run Keyword If ${has_dataplane} Clean Up Linux
82 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
83 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
84 Run Keyword If ${has_dataplane} Clean Up Linux
85 FOR ${I} IN RANGE 0 ${num_all_onus}
86 ${src}= Set Variable ${hosts.src[${I}]}
87 ${dst}= Set Variable ${hosts.dst[${I}]}
88 ${service_type}= Get Variable Value ${src['service_type']} "null"
89 ${of_id}= Get ofID From OLT List ${src['olt']}
90 ${onu_device_id}= Get Device ID From SN ${src['onu']}
91 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
92 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
93 # Disable Power Switch
94 Disable Switch Outlet ${src['power_switch_port']}
95 # TODO: Add verification for MCAST
96 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
97 ... Wait Until Keyword Succeeds 60s 2s
98 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
99 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
100 # Remove Subscriber Access (To replicate TT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000101 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass364ec452021-04-14 07:12:28 +0000102 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
103 Sleep 5s
104 # Enable Power Switch
105 Enable Switch Outlet ${src['power_switch_port']}
106 # Check ONU port is Enabled in ONOS
107 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000108 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlass364ec452021-04-14 07:12:28 +0000109 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
TorstenThieme4e2168e2021-06-22 14:01:47 +0000110 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass364ec452021-04-14 07:12:28 +0000111 ... volt-add-subscriber-access ${of_id} ${onu_port}
112 # Verify ONU state in voltha
113 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s Validate Device
114 ... ENABLED ACTIVE REACHABLE
115 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
116 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast'
117 ... Run Keyword And Continue On Failure Validate DHCP and Ping True
118 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
119 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
120 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
121 ... ${dst['container_name']}
122 ... ELSE IF ${has_dataplane} and '${service_type}' == 'mcast' Run Keyword And Continue On Failure
123 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT MCAST one ONU ${src}
124 ... ${dst} ${suppressaddsubscriber}
125 END
126
127Verify OLT after Rebooting Physically for TT
128 [Documentation] Test the physical reboot of the OLT
129 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityTT test was executed)
130 ... Test performs a physical reboot, performs "reboot" from the OLT CLI
131 [Tags] functionalTT PhysicalOltRebootTT
132 [Setup] Start Logging RebootOlt_Physical_TT
133 [Teardown] Run Keywords Collect Logs
Hardik Windlass364ec452021-04-14 07:12:28 +0000134 ... AND Delete All Devices and Verify
Girish Gowdraf244d5b2021-09-01 17:16:16 -0700135 ... AND Run Keyword If ${logging} Collect Logs
136 ... AND Stop Logging RebootOlt_Physical_TT
Hardik Windlass364ec452021-04-14 07:12:28 +0000137 # Add OLT device
138 Setup
139 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
140 Run Keyword If ${has_dataplane} Clean Up Linux
141 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
142 # Reboot the OLT from the OLT CLI
143 FOR ${I} IN RANGE 0 ${olt_count}
144 ${olt_user}= Get From Dictionary ${list_olts}[${I}] user
145 ${olt_pass}= Get From Dictionary ${list_olts}[${I}] pass
146 ${olt_ssh_ip}= Get From Dictionary ${list_olts}[${I}] sship
147 ${olt_serial_number}= Get From Dictionary ${list_olts}[${I}] sn
148 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
149 Run Keyword If ${has_dataplane} Login And Run Command On Remote System
150 ... reboot ${olt_ssh_ip} ${olt_user} ${olt_pass} prompt=#
151 END
152 FOR ${I} IN RANGE 0 ${num_all_onus}
153 ${src}= Set Variable ${hosts.src[${I}]}
154 ${dst}= Set Variable ${hosts.dst[${I}]}
155 ${service_type}= Get Variable Value ${src['service_type']} "null"
156 # TODO: Add verification for MCAST
157 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
158 ... Wait Until Keyword Succeeds 60s 2s
159 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
160 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
161 END
162 # Wait for the OLT to come back up
163 FOR ${I} IN RANGE 0 ${olt_count}
164 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
165 ${olt_user}= Get From Dictionary ${list_olts}[${I}] user
166 ${olt_pass}= Get From Dictionary ${list_olts}[${I}] pass
167 ${olt_ssh_ip}= Get From Dictionary ${list_olts}[${I}] sship
168 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
169 Run Keyword If ${has_dataplane} Wait Until Keyword Succeeds 120s 10s
170 ... Check Remote System Reachability True ${olt_ssh_ip}
171 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
172 ... Validate OLT Device ENABLED ACTIVE
173 ... REACHABLE ${olt_serial_number}
174 END
175 Run Keyword If ${has_dataplane} Clean Up Linux
176 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
177
Hardik Windlass8a8d81c2021-04-22 15:33:42 +0000178Verify ONU Soft Reboot for TT
179 [Documentation] Test the ONU Soft Reboot functionality.
180 [Tags] functionalTT OnuSoftRebootTT
181 [Setup] Start Logging SoftRebootOnu_TT
182 [Teardown] Run Keywords Collect Logs
Hardik Windlass8a8d81c2021-04-22 15:33:42 +0000183 ... AND Delete All Devices and Verify
Girish Gowdraf244d5b2021-09-01 17:16:16 -0700184 ... AND Collect Logs
185 ... AND Stop Logging SoftRebootOnu_TT
Hardik Windlass8a8d81c2021-04-22 15:33:42 +0000186 # Add OLT device
187 Setup
188 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
189 Run Keyword If ${has_dataplane} Clean Up Linux
190 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
191 FOR ${I} IN RANGE 0 ${num_all_onus}
192 ${src}= Set Variable ${hosts.src[${I}]}
193 ${dst}= Set Variable ${hosts.dst[${I}]}
194 ${service_type}= Get Variable Value ${src['service_type']} "null"
195 ${of_id}= Get ofID From OLT List ${src['olt']}
196 ${onu_device_id}= Get Device ID From SN ${src['onu']}
197 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
198 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
199 Reboot Device ${onu_device_id}
200 # TODO: Add verification for MCAST
201 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
202 ... Wait Until Keyword Succeeds ${timeout} 2s
203 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
204 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
205 # Remove Subscriber Access (To replicate TT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000206 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass8a8d81c2021-04-22 15:33:42 +0000207 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
208 # Check ONU port is Enabled in ONOS
209 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000210 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlass8a8d81c2021-04-22 15:33:42 +0000211 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
TorstenThieme4e2168e2021-06-22 14:01:47 +0000212 ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Hardik Windlass8a8d81c2021-04-22 15:33:42 +0000213 ... volt-add-subscriber-access ${of_id} ${onu_port}
214 # Verify ONU state in voltha
215 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
216 ... ENABLED ACTIVE REACHABLE
217 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
218 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast'
219 ... Run Keyword And Continue On Failure Validate DHCP and Ping True
220 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
221 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
222 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
223 ... ${dst['container_name']}
224 ... ELSE IF ${has_dataplane} and '${service_type}' == 'mcast' Run Keyword And Continue On Failure
225 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT MCAST one ONU ${src}
226 ... ${dst} ${suppressaddsubscriber}
227 END
228 Run Keyword If ${has_dataplane} Clean Up Linux
229 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT ${suppressaddsubscriber}
230
Hardik Windlass656661a2021-04-23 03:46:31 +0000231Verify OLT Soft Reboot for TT
232 [Documentation] Test the OLT Soft Reboot functionality.
233 [Tags] functionalTT OltSoftRebootTT
234 [Setup] Start Logging SoftRebootOlt_TT
235 [Teardown] Run Keywords Collect Logs
Hardik Windlass656661a2021-04-23 03:46:31 +0000236 ... AND Delete All Devices and Verify
Girish Gowdraf244d5b2021-09-01 17:16:16 -0700237 ... AND Collect Logs
238 ... AND Stop Logging SoftRebootOlt_TT
Hardik Windlass656661a2021-04-23 03:46:31 +0000239 # Add OLT device
240 Setup
241 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
242 Run Keyword If ${has_dataplane} Clean Up Linux
243 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
244 # Reboot the OLT from the OLT CLI
245 FOR ${I} IN RANGE 0 ${olt_count}
246 ${olt_serial_number}= Get From Dictionary ${list_olts}[${I}] sn
247 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
248 # Reboot the OLT using "voltctl device reboot" command
249 Reboot Device ${olt_device_id}
Andrea Campanella9d8d3a52021-06-17 12:18:23 +0200250 # Wait for the OLT to actually go down
251 Wait Until Keyword Succeeds 360s 5s Validate OLT Device ENABLED UNKNOWN UNREACHABLE
252 ... ${olt_serial_number}
Hardik Windlass656661a2021-04-23 03:46:31 +0000253 END
254 FOR ${I} IN RANGE 0 ${num_all_onus}
255 ${src}= Set Variable ${hosts.src[${I}]}
256 ${dst}= Set Variable ${hosts.dst[${I}]}
257 ${service_type}= Get Variable Value ${src['service_type']} "null"
258 # TODO: Add verification for MCAST
259 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
260 ... Wait Until Keyword Succeeds ${timeout} 2s
261 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
262 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
263 END
264 # Wait for the OLT to come back up
265 FOR ${I} IN RANGE 0 ${olt_count}
266 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
267 ${olt_user}= Get From Dictionary ${list_olts}[${I}] user
268 ${olt_pass}= Get From Dictionary ${list_olts}[${I}] pass
269 ${olt_ssh_ip}= Get From Dictionary ${list_olts}[${I}] sship
270 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
271 Run Keyword If ${has_dataplane} Wait Until Keyword Succeeds 120s 10s
272 ... Check Remote System Reachability True ${olt_ssh_ip}
273 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
274 ... Validate OLT Device ENABLED ACTIVE
275 ... REACHABLE ${olt_serial_number}
276 END
277 Run Keyword If ${has_dataplane} Clean Up Linux
278 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
279
Emrehan UZUN2884ed52021-05-04 15:36:31 +0000280Verify restart openolt-adapter container before subscriber provisioning for TT
281 [Documentation] Restart openolt-adapter container after VOLTHA is operational.
282 [Tags] functionalTT Restart-OpenOlt-Before-Subscription-TT
283 [Setup] Start Logging Restart-OpenOlt-Before-Subscription-TT
284 [Teardown] Run Keywords Collect Logs
Emrehan UZUN2884ed52021-05-04 15:36:31 +0000285 ... AND Delete All Devices and Verify
Girish Gowdraf244d5b2021-09-01 17:16:16 -0700286 ... AND Collect Logs
287 ... AND Stop Logging Restart-OpenOlt-Before-Subscription-TT
Emrehan UZUN2884ed52021-05-04 15:36:31 +0000288 # Add OLT device
289 Setup
290 Run Keyword If ${has_dataplane} Clean Up Linux
291 FOR ${I} IN RANGE 0 ${olt_count}
292 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
293 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
294 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
295 ... ${olt_serial_number}
296 ${nni_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
297 ... Get NNI Port in ONOS ${of_id}
298 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
299 ... Verify Default Downstream Flows are added in ONOS for OLT TT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
300 ... ${nni_port}
301 END
302 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
303 Log ${podStatusOutput}
304 ${countBeforeRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
305 ${podName} Set Variable ${OLT_ADAPTER_APP_LABEL}
306 Wait Until Keyword Succeeds ${timeout} 15s Delete K8s Pods By Label ${NAMESPACE} app ${podName}
307 Sleep 5s
308 Wait Until Keyword Succeeds ${timeout} 2s Validate Pods Status By Label ${NAMESPACE}
309 ... app ${podName} Running
310 Wait Until Keyword Succeeds ${timeout} 3s Pods Are Ready By Label ${NAMESPACE} app ${podName}
311 ${countAfterRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
312 Should Be Equal As Strings ${countAfterRestart} ${countBeforeRestart}
313 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
314 Log to console Pod ${podName} restarted and sanity checks passed successfully
315
Hardik Windlassd3f63892021-03-25 08:28:02 +0000316Verify restart ofagent container after subscriber is provisioned for TT
317 [Documentation] Restart ofagent container after VOLTHA is operational.
Hardik Windlassa9ec90d2021-05-27 11:33:22 +0000318 [Tags] functionalTT ofagentRestart-TT
Hardik Windlassd3f63892021-03-25 08:28:02 +0000319 [Setup] Start Logging ofagentRestart-TT
320 [Teardown] Run Keywords Collect Logs
321 ... AND Stop Logging ofagentRestart-TT
Matteo Scandoloa4e59522021-08-31 14:56:24 -0700322 ... AND Scale K8s Deployment ${NAMESPACE} ${STACK_NAME}-voltha-ofagent 1
Girish Gowdra110e8782021-10-19 15:09:43 -0700323 # Add OLT device
324 Setup
325 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlassd3f63892021-03-25 08:28:02 +0000326 # set timeout value
327 ${waitforRestart} Set Variable 120s
328 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
329 Log ${podStatusOutput}
330 ${countBforRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
331 ${podName} Set Variable ofagent
332 Wait Until Keyword Succeeds ${timeout} 15s Delete K8s Pods By Label ${NAMESPACE} app ${podName}
333 Wait Until Keyword Succeeds ${timeout} 2s Validate Pods Status By Label ${NAMESPACE}
334 ... app ${podName} Running
335 Wait Until Keyword Succeeds ${timeout} 3s Pods Are Ready By Label ${NAMESPACE} app ${podName}
336 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlassa9ec90d2021-05-27 11:33:22 +0000337 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT ${suppressaddsubscriber}
Hardik Windlassd3f63892021-03-25 08:28:02 +0000338 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
339 Log ${podStatusOutput}
340 ${countAfterRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
341 Should Be Equal As Strings ${countAfterRestart} ${countBforRestart}
342 # Scale Down the Of-Agent Deployment
Matteo Scandoloa4e59522021-08-31 14:56:24 -0700343 Scale K8s Deployment ${NAMESPACE} ${STACK_NAME}-voltha-ofagent 0
Hardik Windlassd3f63892021-03-25 08:28:02 +0000344 Sleep 30s
345 FOR ${I} IN RANGE 0 ${num_all_onus}
346 ${src}= Set Variable ${hosts.src[${I}]}
347 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlassa9ec90d2021-05-27 11:33:22 +0000348 ${service_type}= Get Variable Value ${src['service_type']} "null"
Hardik Windlassd3f63892021-03-25 08:28:02 +0000349 ${of_id}= Get ofID From OLT List ${src['olt']}
350 ${onu_device_id}= Get Device ID From SN ${src['onu']}
351 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
352 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
353 # Verify ONU state in voltha
354 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s Validate Device
355 ... ENABLED ACTIVE REACHABLE
356 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
357 # Check ONU port is Disabled in ONOS
358 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000359 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlassd3f63892021-03-25 08:28:02 +0000360 # Verify Ping
Hardik Windlassa9ec90d2021-05-27 11:33:22 +0000361 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast'
362 ... Run Keyword And Continue On Failure Check Ping True
Hardik Windlassd3f63892021-03-25 08:28:02 +0000363 ... ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']} ${src['ip']}
364 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
365 END
366 # Scale Up the Of-Agent Deployment
Matteo Scandoloa4e59522021-08-31 14:56:24 -0700367 Scale K8s Deployment ${NAMESPACE} ${STACK_NAME}-voltha-ofagent 1
Hardik Windlassd3f63892021-03-25 08:28:02 +0000368 Wait Until Keyword Succeeds ${waitforRestart} 2s Validate Pod Status ofagent ${NAMESPACE}
369 ... Running
370 Run Keyword If ${has_dataplane} Clean Up Linux
371 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT ${suppressaddsubscriber}
372 Log to console Pod ${podName} restarted and sanity checks passed successfully
373
374Sanity E2E Test for OLT/ONU on POD With Core Fail and Restart for TT
375 [Documentation] Deploys an device instance. After that rw-core deployment is scaled to 0 instances to
376 ... simulate a POD crash. The test then scales the rw-core back to a single instance
377 ... and configures ONOS for access. The test succeeds if the device is able to
378 ... complete the DHCP sequence.
Hardik Windlass3e3c9942021-04-09 11:37:15 +0000379 [Tags] functionalTT rwcore-restart-TT
Hardik Windlassd3f63892021-03-25 08:28:02 +0000380 [Setup] Run Keywords Start Logging RwCoreFailAndRestart-TT
381 ... AND Clear All Devices Then Create New Device
382 [Teardown] Run Keywords Collect Logs
383 ... AND Stop Logging RwCoreFailAndRestart-TT
384 Run Keyword If ${has_dataplane} Clean Up Linux
385 FOR ${I} IN RANGE 0 ${olt_count}
386 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
387 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
388 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
389 ... ${olt_serial_number}
390 ${nni_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
391 ... Get NNI Port in ONOS ${of_id}
392 END
393 FOR ${I} IN RANGE 0 ${num_all_onus}
394 ${src}= Set Variable ${hosts.src[${I}]}
395 ${dst}= Set Variable ${hosts.dst[${I}]}
396 ${of_id}= Get ofID From OLT List ${src['olt']}
397 ${onu_device_id}= Get Device ID From SN ${src['onu']}
398 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
399 ... ${of_id}
400 # Bring up the device and verify it authenticates
401 Wait Until Keyword Succeeds 360s 5s Validate Device ENABLED ACTIVE REACHABLE
Hardik Windlass8b446492021-06-10 06:25:23 +0000402 ... ${onu_device_id} onu=True onu_reason=initial-mib-downloaded by_dev_id=True
Hardik Windlassd3f63892021-03-25 08:28:02 +0000403 END
404
405 # Scale down the rw-core deployment to 0 PODs and once confirmed, scale it back to 1
406 Scale K8s Deployment voltha voltha-voltha-rw-core 0
407 Wait Until Keyword Succeeds ${timeout} 2s Pod Does Not Exist voltha voltha-voltha-rw-core
408 # Ensure the ofagent POD goes "not-ready" as expected
409 Wait Until keyword Succeeds ${timeout} 2s
410 ... Check Expected Available Deployment Replicas voltha voltha-voltha-ofagent 0
411 # Scale up the core deployment and make sure both it and the ofagent deployment are back
412 Scale K8s Deployment voltha voltha-voltha-rw-core 1
413 Wait Until Keyword Succeeds ${timeout} 2s
414 ... Check Expected Available Deployment Replicas voltha voltha-voltha-rw-core 1
415 Wait Until Keyword Succeeds ${timeout} 2s
416 ... Check Expected Available Deployment Replicas voltha voltha-voltha-ofagent 1
417 # For some reason scaling down and up the POD behind a service causes the port forward to stop working,
418 # so restart the port forwarding for the API service
419 Restart VOLTHA Port Forward voltha-api
420 # Ensure that the ofagent pod is up and ready and the device is available in ONOS, this
421 # represents system connectivity being restored
422 FOR ${I} IN RANGE 0 ${olt_count}
423 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
424 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
425 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
426 ... ${olt_serial_number}
427 Wait Until Keyword Succeeds 120s 2s Device Is Available In ONOS
428 ... http://karaf:karaf@${ONOS_REST_IP}:${ONOS_REST_PORT} ${of_id}
429 END
Hardik Windlass3e3c9942021-04-09 11:37:15 +0000430 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
TorstenThieme136ebf72021-02-26 14:27:07 +0000431
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000432Verify restart openonu-adapter container for TT
Hardik Windlassd50b0202021-09-02 14:45:09 +0000433 [Documentation] Restart openonu-adapter container after VOLTHA is operational.
434 ... Run the ping continuously in background during container restart,
435 ... and verify that there should be no affect on the dataplane.
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000436 ... Also, verify that the voltha control plane functionality is not affected.
437 [Tags] functionalTT Restart-OpenOnu-Ping-TT
Hardik Windlassd50b0202021-09-02 14:45:09 +0000438 [Setup] Start Logging Restart-OpenOnu-Ping-TT
439 [Teardown] Run Keywords Collect Logs
440 ... AND Stop Logging Restart-OpenOnu-Ping-TT
441 Clear All Devices Then Create New Device
442 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
443 Run Keyword If ${has_dataplane} Clean Up Linux
444 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT
445 FOR ${I} IN RANGE 0 ${num_all_onus}
446 ${src}= Set Variable ${hosts.src[${I}]}
447 ${dst}= Set Variable ${hosts.dst[${I}]}
448 ${service_type}= Get Variable Value ${src['service_type']} "null"
449 Continue For Loop If '${service_type}' == 'mcast'
450 ${ping_output_file}= Set Variable /tmp/${src['onu']}_${service_type}_ping
451 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
452 ... Wait Until Keyword Succeeds 60s 2s
453 ... Run Ping In Background ${ping_output_file} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
454 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
455 END
456 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
457 Log ${podStatusOutput}
458 ${countBeforeRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
459 ${podName} Set Variable adapter-open-onu
460 Wait Until Keyword Succeeds ${timeout} 15s Delete K8s Pods By Label ${NAMESPACE} app ${podName}
461 Sleep 5s
462 Wait Until Keyword Succeeds ${timeout} 2s Validate Pods Status By Label ${NAMESPACE}
463 ... app ${podName} Running
464 Wait Until Keyword Succeeds ${timeout} 3s Pods Are Ready By Label ${NAMESPACE} app ${podName}
465 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
466 Log ${podStatusOutput}
467 ${countAfterRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
468 Should Be Equal As Strings ${countAfterRestart} ${countBeforeRestart}
469 FOR ${I} IN RANGE 0 ${num_all_onus}
470 ${src}= Set Variable ${hosts.src[${I}]}
471 ${dst}= Set Variable ${hosts.dst[${I}]}
472 ${service_type}= Get Variable Value ${src['service_type']} "null"
473 Continue For Loop If '${service_type}' == 'mcast'
474 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
475 ... Wait Until Keyword Succeeds 60s 2s
476 ... Stop Ping Running In Background ${src['ip']} ${src['user']} ${src['pass']}
477 ... ${src['container_type']} ${src['container_name']}
478 END
479 FOR ${I} IN RANGE 0 ${num_all_onus}
480 ${src}= Set Variable ${hosts.src[${I}]}
481 ${dst}= Set Variable ${hosts.dst[${I}]}
482 ${service_type}= Get Variable Value ${src['service_type']} "null"
483 Continue For Loop If '${service_type}' == 'mcast'
484 ${ping_output_file}= Set Variable /tmp/${src['onu']}_${service_type}_ping
485 ${ping_output}= Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
486 ... Wait Until Keyword Succeeds 60s 2s
487 ... Retrieve Remote File Contents ${ping_output_file} ${src['ip']} ${src['user']} ${src['pass']}
488 ... ${src['container_type']} ${src['container_name']}
489 Check Ping Result True ${ping_output}
490 END
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000491 # Verify Control Plane Functionality by Deleting and Re-adding the Subscriber
492 Verify Control Plane After Pod Restart TT
Hardik Windlassd50b0202021-09-02 14:45:09 +0000493
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000494Verify restart openolt-adapter container for TT
Hardik Windlassd50b0202021-09-02 14:45:09 +0000495 [Documentation] Restart openolt-adapter container after VOLTHA is operational.
496 ... Run the ping continuously in background during container restart,
497 ... and verify that there should be no affect on the dataplane.
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000498 ... Also, verify that the voltha control plane functionality is not affected.
499 [Tags] functionalTT Restart-OpenOlt-Ping-TT
Hardik Windlassd50b0202021-09-02 14:45:09 +0000500 [Setup] Start Logging Restart-OpenOlt-Ping-TT
501 [Teardown] Run Keywords Collect Logs
502 ... AND Stop Logging Restart-OpenOlt-Ping-TT
503 Clear All Devices Then Create New Device
504 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
505 Run Keyword If ${has_dataplane} Clean Up Linux
506 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT
507 FOR ${I} IN RANGE 0 ${num_all_onus}
508 ${src}= Set Variable ${hosts.src[${I}]}
509 ${dst}= Set Variable ${hosts.dst[${I}]}
510 ${service_type}= Get Variable Value ${src['service_type']} "null"
511 Continue For Loop If '${service_type}' == 'mcast'
512 ${ping_output_file}= Set Variable /tmp/${src['onu']}_${service_type}_ping
513 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
514 ... Wait Until Keyword Succeeds 60s 2s
515 ... Run Ping In Background ${ping_output_file} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
516 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
517 END
518 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
519 Log ${podStatusOutput}
520 ${countBeforeRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
521 ${podName} Set Variable ${OLT_ADAPTER_APP_LABEL}
522 Wait Until Keyword Succeeds ${timeout} 15s Delete K8s Pods By Label ${NAMESPACE} app ${podName}
523 Sleep 5s
524 Wait Until Keyword Succeeds ${timeout} 2s Validate Pods Status By Label ${NAMESPACE}
525 ... app ${podName} Running
526 Wait Until Keyword Succeeds ${timeout} 3s Pods Are Ready By Label ${NAMESPACE} app ${podName}
527 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
528 Log ${podStatusOutput}
529 ${countAfterRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
530 Should Be Equal As Strings ${countAfterRestart} ${countBeforeRestart}
531 FOR ${I} IN RANGE 0 ${num_all_onus}
532 ${src}= Set Variable ${hosts.src[${I}]}
533 ${dst}= Set Variable ${hosts.dst[${I}]}
534 ${service_type}= Get Variable Value ${src['service_type']} "null"
535 Continue For Loop If '${service_type}' == 'mcast'
536 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
537 ... Wait Until Keyword Succeeds 60s 2s
538 ... Stop Ping Running In Background ${src['ip']} ${src['user']} ${src['pass']}
539 ... ${src['container_type']} ${src['container_name']}
540 END
541 FOR ${I} IN RANGE 0 ${num_all_onus}
542 ${src}= Set Variable ${hosts.src[${I}]}
543 ${dst}= Set Variable ${hosts.dst[${I}]}
544 ${service_type}= Get Variable Value ${src['service_type']} "null"
545 Continue For Loop If '${service_type}' == 'mcast'
546 ${ping_output_file}= Set Variable /tmp/${src['onu']}_${service_type}_ping
547 ${ping_output}= Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
548 ... Wait Until Keyword Succeeds 60s 2s
549 ... Retrieve Remote File Contents ${ping_output_file} ${src['ip']} ${src['user']} ${src['pass']}
550 ... ${src['container_type']} ${src['container_name']}
551 Check Ping Result True ${ping_output}
552 END
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000553 # Verify Control Plane Functionality by Deleting and Re-adding the Subscriber
554 Verify Control Plane After Pod Restart TT
555
556Verify restart rw-core container for TT
557 [Documentation] Restart rw-core container after VOLTHA is operational.
558 ... Run the ping continuously in background during container restart,
559 ... and verify that there should be no affect on the dataplane.
560 ... Also, verify that the voltha control plane functionality is not affected.
561 [Tags] functionalTT Restart-RwCore-Ping-TT
562 [Setup] Start Logging Restart-RwCore-Ping-TT
563 [Teardown] Run Keywords Collect Logs
564 ... AND Stop Logging Restart-RwCore-Ping-TT
565 Clear All Devices Then Create New Device
566 # Performing Sanity Test to make sure subscribers are all DHCP and pingable
567 Run Keyword If ${has_dataplane} Clean Up Linux
568 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT
569 FOR ${I} IN RANGE 0 ${num_all_onus}
570 ${src}= Set Variable ${hosts.src[${I}]}
571 ${dst}= Set Variable ${hosts.dst[${I}]}
572 ${service_type}= Get Variable Value ${src['service_type']} "null"
573 Continue For Loop If '${service_type}' == 'mcast'
574 ${ping_output_file}= Set Variable /tmp/${src['onu']}_${service_type}_ping
575 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
576 ... Wait Until Keyword Succeeds 60s 2s
577 ... Run Ping In Background ${ping_output_file} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
578 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
579 END
580 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
581 Log ${podStatusOutput}
582 ${countBeforeRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
583 ${podName} Set Variable rw-core
584 Wait Until Keyword Succeeds ${timeout} 15s Delete K8s Pods By Label ${NAMESPACE} app ${podName}
585 Sleep 5s
586 Wait Until Keyword Succeeds ${timeout} 2s Validate Pods Status By Label ${NAMESPACE}
587 ... app ${podName} Running
588 Wait Until Keyword Succeeds ${timeout} 3s Pods Are Ready By Label ${NAMESPACE} app ${podName}
589 # For some reason scaling down and up the POD behind a service causes the port forward to stop working,
590 # so restart the port forwarding for the API service
591 Restart VOLTHA Port Forward voltha-api
592 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
593 Log ${podStatusOutput}
594 ${countAfterRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
595 Should Be Equal As Strings ${countAfterRestart} ${countBeforeRestart}
596 FOR ${I} IN RANGE 0 ${num_all_onus}
597 ${src}= Set Variable ${hosts.src[${I}]}
598 ${dst}= Set Variable ${hosts.dst[${I}]}
599 ${service_type}= Get Variable Value ${src['service_type']} "null"
600 Continue For Loop If '${service_type}' == 'mcast'
601 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
602 ... Wait Until Keyword Succeeds 60s 2s
603 ... Stop Ping Running In Background ${src['ip']} ${src['user']} ${src['pass']}
604 ... ${src['container_type']} ${src['container_name']}
605 END
606 FOR ${I} IN RANGE 0 ${num_all_onus}
607 ${src}= Set Variable ${hosts.src[${I}]}
608 ${dst}= Set Variable ${hosts.dst[${I}]}
609 ${service_type}= Get Variable Value ${src['service_type']} "null"
610 Continue For Loop If '${service_type}' == 'mcast'
611 ${ping_output_file}= Set Variable /tmp/${src['onu']}_${service_type}_ping
612 ${ping_output}= Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
613 ... Wait Until Keyword Succeeds 60s 2s
614 ... Retrieve Remote File Contents ${ping_output_file} ${src['ip']} ${src['user']} ${src['pass']}
615 ... ${src['container_type']} ${src['container_name']}
616 Check Ping Result True ${ping_output}
617 END
618 # Verify Control Plane Functionality by Deleting and Re-adding the Subscriber
619 Verify Control Plane After Pod Restart TT
Hardik Windlassd50b0202021-09-02 14:45:09 +0000620
TorstenThieme136ebf72021-02-26 14:27:07 +0000621*** Keywords ***
622Setup Suite
623 [Documentation] Set up the test suite
624 Common Test Suite Setup
625 ${switch_type}= Get Variable Value ${web_power_switch.type}
626 Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type}
627
TorstenThieme136ebf72021-02-26 14:27:07 +0000628Teardown Suite
629 [Documentation] Tear down steps for the suite
630 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass04896f62021-03-05 16:15:11 +0530631 Run Keyword If ${teardown_device} Delete All Devices and Verify
TorstenThieme4e2168e2021-06-22 14:01:47 +0000632 Close All ONOS SSH Connections
Hardik Windlassd3f63892021-03-25 08:28:02 +0000633
634Clear All Devices Then Create New Device
635 [Documentation] Remove any devices from VOLTHA and ONOS & then Create new devices
636 # Remove all devices from voltha and onos
637 Delete All Devices and Verify
638 # Execute normal test Setup Keyword
639 Setup
Hardik Windlasscf46ec42021-09-28 08:05:49 +0000640
641Verify Control Plane After Pod Restart TT
642 [Documentation] Verifies the control plane functionality after the voltha pod restart
643 ... by deleting and re-adding the subscriber
644 Run Keyword If ${has_dataplane} Clean Up Linux
645 FOR ${I} IN RANGE 0 ${num_all_onus}
646 ${src}= Set Variable ${hosts.src[${I}]}
647 ${dst}= Set Variable ${hosts.dst[${I}]}
648 ${service_type}= Get Variable Value ${src['service_type']} "null"
649 ${of_id}= Get ofID From OLT List ${src['olt']}
650 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
651 ... ${of_id} ${src['uni_id']}
652 # Remove Subscriber Access
653 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
654 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
655 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast'
656 ... Wait Until Keyword Succeeds ${timeout} 2s
657 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
658 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
659 # Add Subscriber Access
660 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
661 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
662 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
663 ... Validate Device ENABLED ACTIVE
664 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
665 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
666 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT one ONU ${src}
667 ... ${dst} ${suppressaddsubscriber}
668 ... ELSE IF ${has_dataplane} and '${service_type}' == 'mcast' Run Keyword And Continue On Failure
669 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT MCAST one ONU ${src}
670 ... ${dst} ${suppressaddsubscriber}
671 END