blob: 8e7083c7f54cb032ce7b8cfb585098ef399b1589 [file] [log] [blame]
Hardik Windlassa3d04b92020-02-17 15:06:05 +00001# Copyright 2017 - present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14# FIXME Can we use the same test against BBSim and Hardware?
15
16*** Settings ***
17Documentation Test various end-to-end scenarios
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
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070034Resource ../../libraries/power_switch.robot
Hardik Windlassa3d04b92020-02-17 15:06:05 +000035
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
45# For below variable value, using deployment name as using grep for
46# parsing radius pod name, we can also use full radius pod name
47${RESTART_POD_NAME} radius
Suchitra Vemurie9c6ca62020-07-27 16:44:53 -070048${timeout} 360s
Hardik Windlassa3d04b92020-02-17 15:06:05 +000049${of_id} 0
50${logical_id} 0
Andrea Campanella86e24062020-08-05 19:09:18 +020051${uprate} 0
52${dnrate} 0
Hardik Windlassa3d04b92020-02-17 15:06:05 +000053${has_dataplane} True
Hardik Windlassffbf0602020-04-24 23:14:45 +053054${teardown_device} True
Hardik Windlassa3d04b92020-02-17 15:06:05 +000055${scripts} ../../scripts
56
Andy Baviere19991a2020-05-08 10:42:40 -070057# For dataplane bandwidth testing
58${upper_margin_pct} 105 # Allow 5% over the limit
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080059${lower_margin_pct} 90 # Allow 8% under the limit
Andy Baviere19991a2020-05-08 10:42:40 -070060${udp_rate_multiplier} 1.10 # Send UDP at bw profile limit * rate_multiplier
Andy Bavierc80a2742020-08-28 10:59:05 -070061${udp_packet_bytes} 1470 # UDP payload in bytes
Andy Baviere19991a2020-05-08 10:42:40 -070062
Hardik Windlassa3d04b92020-02-17 15:06:05 +000063# Per-test logging on failure is turned off by default; set this variable to enable
64${container_log_dir} ${None}
65
66*** Test Cases ***
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070067Reboot DT ONUs Physically
68 [Documentation] This test reboots ONUs physically before execution all the tests
69 ... Test case runs only on the PODs that are configured with PowerSwitch that
70 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
Hardik Windlassd6aa0822020-06-29 20:18:12 +053071 [Tags] functionalDt PowerSwitch RebootAllDTONUs
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070072 [Setup] Start Logging RebootAllDTONUs
73 [Teardown] Run Keywords Collect Logs
74 ... AND Stop Logging RebootAllDTONUs
75 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080076 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070077 ${src}= Set Variable ${hosts.src[${I}]}
78 ${dst}= Set Variable ${hosts.dst[${I}]}
79 Disable Switch Outlet ${src['power_switch_port']}
80 Sleep 60s
81 Enable Switch Outlet ${src['power_switch_port']}
82 Sleep 60s
83 END
84
Hardik Windlassa3d04b92020-02-17 15:06:05 +000085Sanity E2E Test for OLT/ONU on POD for DT
86 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
87 ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
88 ... Traffic sent with same vlan from different RGs,
89 ... should reach the NNI port on the OLT with the expected double tagged vlan ids
90 ... Inner vlans from the RG should not change
Suchitra Vemurif2388ad2020-03-15 21:44:44 -070091 [Tags] sanityDt
Andy Baviere187eda2020-04-20 15:00:02 -070092 [Setup] Run Keywords Start Logging SanityTestDt
Hardik Windlassa3d04b92020-02-17 15:06:05 +000093 ... AND Setup
94 [Teardown] Run Keywords Collect Logs
95 ... AND Stop Logging SanityTestDt
Hardik Windlassa3d04b92020-02-17 15:06:05 +000096 Run Keyword If ${has_dataplane} Clean Up Linux
97 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
98
Hardik Windlass35706ba2020-02-20 08:16:42 +000099Test Subscriber Delete and Add for DT
100 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
Hardik Windlass63d5e002020-03-06 21:07:09 +0530101 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
Hardik Windlass35706ba2020-02-20 08:16:42 +0000102 ... Delete a subscriber and validate that the pings do not succeed and state is purged
103 ... Disable and Enable the ONU (This is to replicate the existing DT behaviour)
104 ... Re-add the subscriber, and validate that the flows are present and pings are successful
Suchitra Vemurif2388ad2020-03-15 21:44:44 -0700105 [Tags] functionalDt SubAddDeleteDt
Andy Baviere187eda2020-04-20 15:00:02 -0700106 [Setup] Start Logging SubAddDeleteDt
Hardik Windlass35706ba2020-02-20 08:16:42 +0000107 [Teardown] Run Keywords Collect Logs
108 ... AND Stop Logging SubAddDeleteDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800109 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000110 ${src}= Set Variable ${hosts.src[${I}]}
111 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800112 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000113 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800114 ${olt_device_id}= Get OLTDeviceID From OLT List ${src['olt']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100115 ${num_of_olt_onus}= Get Num of Onus From OLT SN ${src['olt']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000116 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
117 ... ${of_id}
118 # Remove Subscriber Access
ubuntu6b6e7d42020-03-02 12:35:42 -0800119 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000120 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
121 Sleep 10s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000122 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
123 ... Wait Until Keyword Succeeds 60s 2s
124 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
125 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100126
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530127 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
Andrea Campanellad848de02020-11-24 10:23:41 +0100128 ${onos_flows_count}= Evaluate 4 * ( ${num_of_olt_onus} - 1 )
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530129 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
130 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Suchitra Vemuri93db32b2020-11-23 21:27:05 -0800131 ... ${of_id} ${onos_flows_count}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000132 # Verify VOLTHA flows for OLT equals twice the number of ONUS (minus ONU under test) + 1 for LLDP
Andrea Campanellad848de02020-11-24 10:23:41 +0100133 ${olt_flows}= Evaluate 2 * ( ${num_of_olt_onus} - 1 ) + 1
Hardik Windlass35706ba2020-02-20 08:16:42 +0000134 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800135 ... ${olt_device_id}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000136 # Verify VOLTHA flows for ONU under test is Zero
137 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
138 ... ${onu_device_id} 0
139 # Disable and Re-Enable the ONU (To replicate DT current workflow)
140 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
141 Disable Device ${onu_device_id}
142 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
143 ... Validate Device DISABLED UNKNOWN
144 ... REACHABLE ${src['onu']}
145 Enable Device ${onu_device_id}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700146 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000147 ... Validate Device ENABLED ACTIVE
148 ... REACHABLE ${src['onu']}
149 # Add Subscriber Access
ubuntu6b6e7d42020-03-02 12:35:42 -0800150 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000151 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
152 Sleep 10s
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530153 # Verify subscriber access flows are added for the ONU port
154 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass25e11702020-03-30 20:05:19 +0530155 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
156 ... ${onu_port} ${nni_port} ${src['s_tag']}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700157 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000158 ... Validate Device ENABLED ACTIVE
159 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530160 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass35706ba2020-02-20 08:16:42 +0000161 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
162 ... Wait Until Keyword Succeeds 60s 2s
163 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
164 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
165 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
166 Run Keyword and Ignore Error Collect Logs
167 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800168 # Verify flows for all OLTs
169 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate All OLT Flows
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530170 # Verify ONOS Flows
171 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800172 #${onos_flows_count}= Evaluate 4 * ${num_all_onus}
173 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
174 #... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
175 #... ${of_id} ${onos_flows_count}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530176 # Verify VOLTHA Flows
Hardik Windlass35706ba2020-02-20 08:16:42 +0000177 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800178 #${olt_flows}= Evaluate 2 * ${num_all_onus} + 1
Hardik Windlass35706ba2020-02-20 08:16:42 +0000179 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800180 #${onu_flows}= Set Variable 2
181 #Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
182 #${List_ONU_Serial} Create List
183 #Set Suite Variable ${List_ONU_Serial}
184 #Build ONU SN List ${List_ONU_Serial}
185 #Log ${List_ONU_Serial}
186 #Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
187 #... ${List_ONU_Serial} ${onu_flows}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000188
Hardik Windlass63d5e002020-03-06 21:07:09 +0530189Test Disable and Enable ONU for DT
190 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
191 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
192 ... Perform disable on the ONUs and validate that the pings do not succeed
193 ... Perform enable on the ONUs and validate that the pings are successful
Suchitra Vemurif2388ad2020-03-15 21:44:44 -0700194 [Tags] functionalDt DisableEnableONUDt
Andy Baviere187eda2020-04-20 15:00:02 -0700195 [Setup] Start Logging DisableEnableONUDt
Hardik Windlass63d5e002020-03-06 21:07:09 +0530196 [Teardown] Run Keywords Collect Logs
197 ... AND Stop Logging DisableEnableONUDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800198 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530199 ${src}= Set Variable ${hosts.src[${I}]}
200 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800201 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530202 ${onu_device_id}= Get Device ID From SN ${src['onu']}
203 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
204 ... ${of_id}
205 Disable Device ${onu_device_id}
206 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
207 ... Validate Device DISABLED UNKNOWN
208 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-admin-lock
209 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri760bdd32020-06-17 12:34:48 -0700210 ... Verify ONU Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530211 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass63d5e002020-03-06 21:07:09 +0530212 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
213 ... Wait Until Keyword Succeeds 60s 2s
214 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
215 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
216 Sleep 5s
217 Enable Device ${onu_device_id}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700218 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530219 ... Validate Device ENABLED ACTIVE
220 ... REACHABLE ${src['onu']} onu=True onu_reason=onu-reenabled
221 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri760bdd32020-06-17 12:34:48 -0700222 ... Verify ONU Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530223 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass63d5e002020-03-06 21:07:09 +0530224 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
225 ... Wait Until Keyword Succeeds 60s 2s
226 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
227 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
228 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
229 Run Keyword and Ignore Error Collect Logs
230 END
231
Hardik Windlassaaea3402020-03-10 19:45:45 +0530232Test Disable and Delete OLT for DT
233 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
234 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
235 ... Perform disable on the OLT and validate ONUs state and that the pings do not succeed
236 ... Perform delete on the OLT, Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Suchitra Vemurif2388ad2020-03-15 21:44:44 -0700237 [Tags] functionalDt DisableDeleteOLTDt
Suchitra Vemuri221398a2020-05-29 22:45:17 -0700238 [Setup] Start Logging DisableDeleteOLTDt
Hardik Windlassaaea3402020-03-10 19:45:45 +0530239 [Teardown] Run Keywords Collect Logs
240 ... AND Stop Logging DisableDeleteOLTDt
Hardik Windlassaaea3402020-03-10 19:45:45 +0530241 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800242 FOR ${I} IN RANGE 0 ${olt_count}
243 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
244 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
245 Disable Device ${olt_device_id}
246 ${of_id}= Get ofID From OLT List ${olt_serial_number}
247 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
248 ... Validate OLT Device DISABLED UNKNOWN REACHABLE
249 ... ${olt_serial_number}
250 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
251 ... ${olt_serial_number}
252 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
253 # Validate ONUs
254 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONUs After OLT Disable
Andrea Campanella4e507882020-11-26 11:33:11 +0100255 ... ${num_onus} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800256 # Verify ONOS Flows
257 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
258 ${onos_flows_count}= Evaluate 4 * ${num_onus}
259 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
260 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
261 ... ${of_id} ${onos_flows_count}
262 # Verify VOLTHA Flows
263 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
264 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
265 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
266 ${onu_flows}= Set Variable 2
267 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
268 ... ${olt_device_id}
269 ${List_ONU_Serial} Create List
270 Set Suite Variable ${List_ONU_Serial}
Andrea Campanella99a548b2020-11-18 09:50:32 +0100271 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800272 Log ${List_ONU_Serial}
273 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
274 ... ${List_ONU_Serial} ${onu_flows}
275 # Delete OLT and Validate Empty Device List
276 Delete Device ${olt_device_id}
Andrea Campanella4e507882020-11-26 11:33:11 +0100277 # Check that the OLT and the ONUs are actually removed from the system
278 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed
279 ... ${olt_serial_number}
280 Run Keyword and Continue On Failure Validate all ONUS for OLT Removed ${num_all_onus} ${hosts}
281 ... ${olt_serial_number} ${timeout}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800282 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
283 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
284 Run Keyword and Ignore Error Collect Logs
285 END
286 #Disable Device ${olt_device_id}
287 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
288 #... Validate OLT Device DISABLED UNKNOWN REACHABLE
289 #... ${olt_serial_number}
290
Hardik Windlassaaea3402020-03-10 19:45:45 +0530291 # Validate ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800292 #Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONUs After OLT Disable
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530293 # Verify ONOS Flows
294 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800295 #${onos_flows_count}= Evaluate 4 * ${num_all_onus}
296 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
297 #... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
298 #... ${of_id} ${onos_flows_count}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530299 # Verify VOLTHA Flows
Hardik Windlassaaea3402020-03-10 19:45:45 +0530300 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800301 #${olt_flows}= Evaluate 2 * ${num_all_onus} + 1
Hardik Windlassaaea3402020-03-10 19:45:45 +0530302 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800303 #${onu_flows}= Set Variable 2
304 #Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
305 #${List_ONU_Serial} Create List
306 #Set Suite Variable ${List_ONU_Serial}
307 #Build ONU SN List ${List_ONU_Serial}
308 #Log ${List_ONU_Serial}
309 #Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
310 #... ${List_ONU_Serial} ${onu_flows}
Hardik Windlassaaea3402020-03-10 19:45:45 +0530311 # Delete OLT and Validate Empty Device List
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800312 #Delete Device ${olt_device_id}
313 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Test Empty Device List
314 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
315 #... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
316 #Run Keyword and Ignore Error Collect Logs
Hardik Windlassaaea3402020-03-10 19:45:45 +0530317 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
318 Run Keyword Setup
Suchitra Vemuriae9cecb2020-03-12 12:59:14 -0700319 Run Keyword If ${has_dataplane} Clean Up Linux
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800320 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
321 #Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlassaaea3402020-03-10 19:45:45 +0530322
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530323Test Disable and Enable OLT for DT
324 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
325 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
326 ... Perform disable on the OLT and validate that the pings do not succeed
327 ... Perform enable on the OLT and validate that the pings are successful
Hardik Windlass2b37e712020-06-12 02:13:17 +0530328 [Tags] functionalDt DisableEnableOLTDt
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530329 [Setup] Start Logging DisableEnableOLTDt
330 [Teardown] Run Keywords Collect Logs
331 ... AND Stop Logging DisableEnableOLTDt
332 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800333 FOR ${I} IN RANGE 0 ${olt_count}
334 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
335 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
336 ${rc} ${output}= Run and Return Rc and Output
337 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
338 Should Be Equal As Integers ${rc} 0
339 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
340 ... ${olt_serial_number}
341 END
342 #Disable Device ${olt_device_id}
343 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
344 #... Validate OLT Device DISABLED UNKNOWN REACHABLE
345 #... ${olt_serial_number}
346 # Validate ONUs
347 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530348 ${src}= Set Variable ${hosts.src[${I}]}
349 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800350 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530351 ${onu_device_id}= Get Device ID From SN ${src['onu']}
352 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
353 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
354 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Suchitra Vemuri760bdd32020-06-17 12:34:48 -0700355 ... Verify ONU Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530356 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
357 ... Wait Until Keyword Succeeds 60s 2s
358 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
359 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
360 # Remove Subscriber Access (To replicate DT workflow)
361 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command ${ONOS_SSH_IP}
362 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass2b37e712020-06-12 02:13:17 +0530363 Sleep 10s
Hardik Windlass7c801e62020-05-04 19:33:21 +0530364 # Delete ONU Device (To replicate DT workflow)
365 Delete Device ${onu_device_id}
Hardik Windlass2b37e712020-06-12 02:13:17 +0530366 Sleep 5s
Hardik Windlass7c801e62020-05-04 19:33:21 +0530367 END
Hardik Windlass2b37e712020-06-12 02:13:17 +0530368 Sleep 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530369 # Enable the OLT back and check ONU, OLT status are back to "ACTIVE"
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800370 FOR ${I} IN RANGE 0 ${olt_count}
371 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
372 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
373 Enable Device ${olt_device_id}
374 Sleep 15s
375 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
376 ... ${olt_serial_number}
377 #TODO: Update for PON_OLT ETHERNET_NNI
378 #Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Port Types
379 #... PON_OLT ETHERNET_NNI
380 END
Hardik Windlass7c801e62020-05-04 19:33:21 +0530381 # Waiting extra time for the ONUs to come up
382 Sleep 60s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800383 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass7c801e62020-05-04 19:33:21 +0530384 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530385
386Test Delete and ReAdd OLT for DT
387 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
388 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
389 ... Disable and Delete the OLT
390 ... Create/Enable the same OLT again
391 ... Validate DHCP/E2E pings succeed for all the ONUs connected to the OLT
392 [Tags] functionalDt DeleteReAddOLTDt
393 [Setup] Start Logging DeleteReAddOLTDt
394 [Teardown] Run Keywords Collect Logs
395 ... AND Stop Logging DeleteReAddOLTDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800396 FOR ${I} IN RANGE 0 ${olt_count}
397 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
398 ${of_id}= Get ofID From OLT List ${olt_serial_number}
399 Delete Device and Verify ${olt_serial_number}
400 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
401 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
402 Run Keyword and Ignore Error Collect Logs
403 END
404 # Recreate the OLTs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530405 Setup
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800406 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530407 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
408
409Test Disable ONUs and OLT Then Delete ONUs and OLT for DT
410 [Documentation] On deployed POD, disable the ONU, disable the OLT and then delete ONU and OLT.
411 ... This TC is to confirm that ONU removal is not impacting OLT
412 ... Devices will be removed during the execution of this TC
413 ... so calling setup at the end to add the devices back to avoid the confusion.
414 [Tags] functionalDt DisableDeleteONUOLTDt
415 [Setup] Start Logging DisableDeleteONUOLTDt
416 [Teardown] Run Keywords Collect Logs
417 ... AND Stop Logging DisableDeleteONUOLTDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800418 #${olt_device_id}= Get Device ID From SN ${olt_serial_number}
419 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530420 ${src}= Set Variable ${hosts.src[${I}]}
421 ${dst}= Set Variable ${hosts.dst[${I}]}
422 ${onu_device_id}= Get Device ID From SN ${src['onu']}
423 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
424 ... Validate Device ENABLED ACTIVE
425 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
426 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
427 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800428 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530429 Disable Device ${onu_device_id}
430 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
431 ... Validate Device DISABLED UNKNOWN
432 ... REACHABLE ${src['onu']} onu=false
433 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
434 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800435 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530436 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800437 #Disable Device ${olt_device_id}
438 # Disable all OLTs
439 FOR ${I} IN RANGE 0 ${olt_count}
440 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
441 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
442 ${rc} ${output}= Run and Return Rc and Output
443 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
444 Should Be Equal As Integers ${rc} 0
445 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
446 ... ${olt_serial_number}
447 END
448 # Validate ONUs after OLT disable
449 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530450 ${src}= Set Variable ${hosts.src[${I}]}
451 ${dst}= Set Variable ${hosts.dst[${I}]}
452 ${onu_device_id}= Get Device ID From SN ${src['onu']}
453 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
454 ... Validate Device DISABLED DISCOVERED
455 ... UNREACHABLE ${src['onu']} onu=false
456 Delete Device ${onu_device_id}
457 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
458 ... Validate OLT Device DISABLED UNKNOWN
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800459 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530460 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800461 # Delete all OLTs
462 Delete All Devices and Verify
463
464 #Delete Device ${olt_device_id}
465 #TODO: Fix the following assertion
466 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Test Empty Device List
467 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
468 #... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
469
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530470 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
471 Run Keyword Setup
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800472 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530473 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530474
Andy Baviere19991a2020-05-08 10:42:40 -0700475Data plane verification using TCP for DT
476 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
477 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Andy Bavier7613b9a2020-07-08 07:25:47 -0700478 [Tags] dataplaneDt BandwidthProfileTCPDt VOL-3061
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700479 [Setup] Start Logging BandwidthProfileTCPDt
480 [Teardown] Run Keywords Collect Logs
481 ... AND Stop Logging BandwidthProfileTCPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700482 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
483 ... physical pod. Skipping this test in BBSIM.
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800484 Delete All Devices And Verify
485 Run Keyword If ${has_dataplane} Clean Up Linux
486 setup
487 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
488
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800489 #${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
490 #... ${olt_serial_number}
491 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700492 ${src}= Set Variable ${hosts.src[${I}]}
493 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800494 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavierf6ab19c2020-05-14 10:34:47 -0700495 # Check for iperf3 and jq tools
496 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
497 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
498 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
499
Andy Baviere19991a2020-05-08 10:42:40 -0700500 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
501 ... ${of_id}
502 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
503 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
504 ... upstreamBandwidthProfile
505 ${limiting_bw_value_upstream} Get Bandwidth Details ${bandwidth_profile_name}
506 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
507 ... downstreamBandwidthProfile
508 ${limiting_bw_value_dnstream} Get Bandwidth Details ${bandwidth_profile_name}
509
510 # Stream TCP packets from RG to server
511 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
512 ... args=-t 30
513 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
514
515 # Stream TCP packets from server to RG
516 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
517 ... args=-R -t 30
518 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
519
520 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
521 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
522 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
523 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
524
525 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
526 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700527 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
528 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
529 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700530 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
531 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
532 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
533 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
534 END
535
536Data plane verification using UDP for DT
537 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
538 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Andy Bavier7613b9a2020-07-08 07:25:47 -0700539 [Tags] dataplaneDt BandwidthProfileUDPDt VOL-3061
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700540 [Setup] Start Logging BandwidthProfileUDPDt
541 [Teardown] Run Keywords Collect Logs
542 ... AND Stop Logging BandwidthProfileUDPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700543 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
544 ... physical pod. Skipping this test in BBSIM.
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800545 #${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
546 #... ${olt_serial_number}
547 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700548 ${src}= Set Variable ${hosts.src[${I}]}
549 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800550 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700551
552 # Check for iperf3 and jq tools
553 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
554 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
555 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
556
Andy Baviere19991a2020-05-08 10:42:40 -0700557 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
558 ... ${of_id}
559 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
560 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
561 ... upstreamBandwidthProfile
562 ${limiting_bw_value_upstream} Get Bandwidth Details ${bandwidth_profile_name}
563 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
564 ... downstreamBandwidthProfile
565 ${limiting_bw_value_dnstream} Get Bandwidth Details ${bandwidth_profile_name}
566
567 # Stream UDP packets from RG to server
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200568 ${uprate}= Run Keyword If ${limiting_bw_value_upstream} != 1000000
569 ... Evaluate ${limiting_bw_value_upstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200570 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200571 ... Set Variable ${limiting_bw_value_upstream}
Andrea Campanella580e0492020-08-05 15:35:48 +0200572
Andy Baviere19991a2020-05-08 10:42:40 -0700573 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700574 ... args=-u -b ${uprate}K -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700575 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
576 ${actual_upstream_bw_used}= Evaluate
577 ... (100 - ${updict['end']['sum']['lost_percent']})*${updict['end']['sum']['bits_per_second']}/100000
578
579 # Stream UDP packets from server to RG
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200580 ${dnrate}= Run Keyword If ${limiting_bw_value_dnstream} != 1000000
581 ... Evaluate ${limiting_bw_value_dnstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200582 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200583 ... Set Variable ${limiting_bw_value_dnstream}
Andy Baviere19991a2020-05-08 10:42:40 -0700584 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700585 ... args=-u -b ${dnrate}K -R -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700586 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
587 ${actual_dnstream_bw_used}= Evaluate
588 ... (100 - ${dndict['end']['sum']['lost_percent']})*${dndict['end']['sum']['bits_per_second']}/100000
589
590 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
591 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
592 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
593 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
594
595 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
596 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700597 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
598 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
599 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700600 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
601 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
602 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
603 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
604 END
605
Andy Bavier7613b9a2020-07-08 07:25:47 -0700606Validate parsing of data traffic through voltha using tech profile
607 [Documentation] Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
608 ... Prerequisite tools : Tcpdump and Mausezahn traffic generator on both RG and DHCP/BNG VMs
609 ... Install jq tool to read json file, where test suite is being running
610 ... Make sure 9999 port is enabled or forwarded for both upsteam and downstream direction
611 ... This test sends UDP packets on port 9999 with pbits between 0 and 7 and validates that
612 ... the pbits are preserved by the PON.
613 [Tags] dataplaneDt TechProfileDt VOL-3291
614 [Setup] Start Logging TechProfileDt
615 [Teardown] Run Keywords Collect Logs
616 ... AND Stop Logging TechProfileDt
617 Pass Execution If '${has_dataplane}'=='False'
618 ... Skipping test: Technology profile validation can be done only in physical pod
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800619 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700620 ${src}= Set Variable ${hosts.src[${I}]}
621 ${dst}= Set Variable ${hosts.dst[${I}]}
622
Andy Bavier275414a2020-07-16 13:07:17 -0700623 ${src_iface_name}= Fetch From Left ${src['dp_iface_name']} .
624
Andy Bavier7613b9a2020-07-08 07:25:47 -0700625 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
626 ${bng_user}= Get Variable Value ${dst['noroot_user']}
627 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
628 Pass Execution If "${bng_ip}" == "${NONE}" or "${bng_user}" == "${NONE}" or "${bng_pass}" == "${NONE}"
629 ... Skipping test: credentials for BNG login required in deployment config
630
631 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
632 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
633 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the RG
634 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
635 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
636 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the BNG
637 Log Upstream test
638 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Andy Bavier275414a2020-07-16 13:07:17 -0700639 ... ${dst['dp_iface_ip_qinq']} ${dst['dp_iface_name']} ${src_iface_name}
640 ... 0 udp 9999 ${src['c_tag']} vlan
Andy Bavier7613b9a2020-07-08 07:25:47 -0700641 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
642 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
643 Log Downstream test
644 ${rg_ip} ${stderr} ${rc}= Execute Remote Command
645 ... ifconfig ${src['dp_iface_name']} | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }'
646 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
647 Should Be Equal As Integers ${rc} 0 Could not get RG's IP address
648 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Andy Bavier275414a2020-07-16 13:07:17 -0700649 ... ${rg_ip} ${src_iface_name} ${dst['dp_iface_name']}.${src['s_tag']}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700650 ... 0 udp 9999 ${src['c_tag']} udp
651 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
652 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
653 END
654
Hardik Windlass16cdf962020-04-29 15:26:50 +0530655Test Disable and Enable OLT PON Port for DT
656 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
657 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
658 ... Perform disable on the OLT PON Port and validate that the pings do not succeed
659 ... Perform enable on the OLT PON Port and validate that the pings are successful
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800660 [Tags] functionalDt DisableEnableOltPonPortDt VOL-2577 notready
Hardik Windlass16cdf962020-04-29 15:26:50 +0530661 [Setup] Start Logging DisableEnableOltPonPortDt
662 [Teardown] Run Keywords Collect Logs
663 ... AND Stop Logging DisableEnableOltPonPortDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800664 TODO: Fix the keywords and test later
Hardik Windlass16cdf962020-04-29 15:26:50 +0530665 ${olt_pon_port_list}= Retrieve OLT PON Ports ${olt_device_id}
666 ${olt_pon_port_list_len}= Get Length ${olt_pon_port_list}
667 FOR ${INDEX0} IN RANGE 0 ${olt_pon_port_list_len}
668 ${olt_pon_port}= Get From List ${olt_pon_port_list} ${INDEX0}
669 ${olt_peer_list}= Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port}
670 # Disable the OLT PON Port and Validate OLT Device
671 DisableOrEnable OLT PON Port disable ${olt_device_id} ${olt_pon_port}
672 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
673 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
674 ... DISABLED DISCOVERED
675 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
676 ... Validate OLT Device ENABLED ACTIVE REACHABLE
677 ... ${olt_serial_number}
678 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
679 ... Validate ONUs for PON OLT Disable DT ${olt_peer_list}
680 Sleep 15s
681 # Enable the OLT PON Port back, and check ONU status are back to "ACTIVE"
682 DisableOrEnable OLT PON Port enable ${olt_device_id} ${olt_pon_port}
683 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
684 ... Validate OLT PON Port Status ${olt_device_id} ${olt_pon_port}
685 ... ENABLED ACTIVE
686 # Waiting extra time for the ONUs to come up
687 Sleep 60s
688 ${olt_peer_list_new}= Retrieve Peer List From OLT PON Port ${olt_device_id} ${olt_pon_port}
689 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
690 ... Validate ONUs for PON OLT Enable DT ${olt_peer_list_new}
691 END
692
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000693*** Keywords ***
694Setup Suite
695 [Documentation] Set up the test suite
696 Common Test Suite Setup
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -0700697 #Restore all ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800698 #Run Keyword If ${has_dataplane} RestoreONUs ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -0700699 #power_switch.robot needs it to support different vendor's power switch
700 ${switch_type}= Get Variable Value ${web_power_switch.type}
701 Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000702
703Clear All Devices Then Create New Device
704 [Documentation] Remove any devices from VOLTHA and ONOS
705 # Remove all devices from voltha and nos
706 Delete All Devices and Verify
707 # Execute normal test Setup Keyword
708 Setup
709