blob: d088bb46e8c635ac81784198369cc15cb246750e [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
Hardik Windlass43531332021-05-19 07:07:03 +000066# logging flag to enable Collect Logs, can be passed via the command line too
67# example: -v logging:False
68${logging} True
69
Hardik Windlass4ed54502021-05-14 07:34:15 +000070# Flag specific to Soak Jobs
71${SOAK_TEST} False
72${bbsim_port} 50060
73
Hardik Windlassa3d04b92020-02-17 15:06:05 +000074*** Test Cases ***
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070075Reboot DT ONUs Physically
76 [Documentation] This test reboots ONUs physically before execution all the tests
77 ... Test case runs only on the PODs that are configured with PowerSwitch that
78 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
Suchitra Vemuri228f8802021-03-10 13:14:17 -080079 [Tags] functionalDt PowerSwitch RebootAllDTONUs soak
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070080 [Setup] Start Logging RebootAllDTONUs
Hardik Windlass43531332021-05-19 07:07:03 +000081 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070082 ... AND Stop Logging RebootAllDTONUs
83 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080084 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070085 ${src}= Set Variable ${hosts.src[${I}]}
86 ${dst}= Set Variable ${hosts.dst[${I}]}
87 Disable Switch Outlet ${src['power_switch_port']}
Hardik Windlass5e214b22021-02-26 10:37:14 +000088 Sleep 10s
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070089 Enable Switch Outlet ${src['power_switch_port']}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070090 END
91
Hardik Windlass4ed54502021-05-14 07:34:15 +000092Create Soak BBSim Device
93 [Documentation] This creates and enables the BBSim device as required by the soak testing
94 ... The BBSim OLT and ONUs created as part of this test are not part of active testing
95 ... but only to mock the load on Soak POD.
96 [Tags] soak
97 [Setup] Start Logging soakPodCreateBBSimLoad
Hardik Windlass43531332021-05-19 07:07:03 +000098 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass4ed54502021-05-14 07:34:15 +000099 ... AND Stop Logging soakPodCreateBBSimLoad
100 ${num_bbsim} Get Length ${bbsim}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000101 @{bbsim_olt_of_id_list}= Create List
Hardik Windlass4ed54502021-05-14 07:34:15 +0000102 FOR ${I} IN RANGE 0 ${num_bbsim}
103 ${ip} Evaluate ${bbsim}[${I}].get("ip")
104 ${serial_number} Evaluate ${bbsim}[${I}].get("serial")
105 ${bbsim_olt_device_id}= Create Device ${ip} ${bbsim_port}
106 Log ${bbsim_olt_device_id}
107 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass8b446492021-06-10 06:25:23 +0000108 ... Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN ${bbsim_olt_device_id} by_dev_id=True
Hardik Windlass4ed54502021-05-14 07:34:15 +0000109 Enable Device ${bbsim_olt_device_id}
110 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
111 ... Validate OLT Device ENABLED ACTIVE REACHABLE ${serial_number}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000112 ${bbsim_olt_of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
Hardik Windlass4ed54502021-05-14 07:34:15 +0000113 ... ${serial_number}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000114 Log ${bbsim_olt_of_id}
115 Append To List ${bbsim_olt_of_id_list} ${bbsim_olt_of_id}
Hardik Windlass4ed54502021-05-14 07:34:15 +0000116 END
117 # Extra sleep time for ONUs to come up Active
Hardik Windlassea4caf72021-07-30 07:22:12 +0000118 Sleep 60s
119 FOR ${bbsim_olt_of_id} IN @{bbsim_olt_of_id_list}
120 Provision all subscribers on device ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${ONOS_SSH_IP} ${ONOS_REST_PORT}
121 ... ${bbsim_olt_of_id}
122 ${total_onus_per_bbsim_olt}= Count Enabled UNI Ports ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
123 ... ${bbsim_olt_of_id}
124 Wait for all flows to in ADDED state ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
125 ... ${bbsim_olt_of_id} dt ${total_onus_per_bbsim_olt} 1 true
126 ... false false false true
127 END
Hardik Windlass4ed54502021-05-14 07:34:15 +0000128
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000129Sanity E2E Test for OLT/ONU on POD for DT
130 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
131 ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
132 ... Traffic sent with same vlan from different RGs,
133 ... should reach the NNI port on the OLT with the expected double tagged vlan ids
134 ... Inner vlans from the RG should not change
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800135 [Tags] sanityDt soak
Hardik Windlass4ed54502021-05-14 07:34:15 +0000136 [Setup] Start Logging SanityTestDt
Hardik Windlass43531332021-05-19 07:07:03 +0000137 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000138 ... AND Stop Logging SanityTestDt
Hardik Windlass4ed54502021-05-14 07:34:15 +0000139 Setup ${SOAK_TEST}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000140 Run Keyword If ${has_dataplane} Clean Up Linux
141 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
142
Hardik Windlass35706ba2020-02-20 08:16:42 +0000143Test Subscriber Delete and Add for DT
144 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
Hardik Windlass63d5e002020-03-06 21:07:09 +0530145 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
Hardik Windlass35706ba2020-02-20 08:16:42 +0000146 ... Delete a subscriber and validate that the pings do not succeed and state is purged
147 ... Disable and Enable the ONU (This is to replicate the existing DT behaviour)
148 ... Re-add the subscriber, and validate that the flows are present and pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800149 [Tags] functionalDt SubAddDeleteDt soak
Andy Baviere187eda2020-04-20 15:00:02 -0700150 [Setup] Start Logging SubAddDeleteDt
Hardik Windlass43531332021-05-19 07:07:03 +0000151 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass35706ba2020-02-20 08:16:42 +0000152 ... AND Stop Logging SubAddDeleteDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800153 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000154 ${src}= Set Variable ${hosts.src[${I}]}
155 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800156 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000157 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800158 ${olt_device_id}= Get OLTDeviceID From OLT List ${src['olt']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100159 ${num_of_olt_onus}= Get Num of Onus From OLT SN ${src['olt']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000160 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
161 ... ${of_id}
162 # Remove Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000163 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000164 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000165 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
166 ... Wait Until Keyword Succeeds 60s 2s
167 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
168 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100169
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530170 # 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 +0100171 ${onos_flows_count}= Evaluate 4 * ( ${num_of_olt_onus} - 1 )
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530172 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
173 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Suchitra Vemuri93db32b2020-11-23 21:27:05 -0800174 ... ${of_id} ${onos_flows_count}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000175 # 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 +0100176 ${olt_flows}= Evaluate 2 * ( ${num_of_olt_onus} - 1 ) + 1
Hardik Windlass35706ba2020-02-20 08:16:42 +0000177 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800178 ... ${olt_device_id}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000179 # Verify VOLTHA flows for ONU under test is Zero
180 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
181 ... ${onu_device_id} 0
182 # Disable and Re-Enable the ONU (To replicate DT current workflow)
183 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
184 Disable Device ${onu_device_id}
185 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
186 ... Validate Device DISABLED UNKNOWN
187 ... REACHABLE ${src['onu']}
188 Enable Device ${onu_device_id}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700189 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000190 ... Validate Device ENABLED ACTIVE
191 ... REACHABLE ${src['onu']}
192 # Add Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000193 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000194 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530195 # Verify subscriber access flows are added for the ONU port
196 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass25e11702020-03-30 20:05:19 +0530197 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
198 ... ${onu_port} ${nni_port} ${src['s_tag']}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700199 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000200 ... Validate Device ENABLED ACTIVE
201 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530202 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass35706ba2020-02-20 08:16:42 +0000203 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
204 ... Wait Until Keyword Succeeds 60s 2s
205 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
206 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000207 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800208 # Verify flows for all OLTs
209 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate All OLT Flows
Hardik Windlass35706ba2020-02-20 08:16:42 +0000210
Hardik Windlass63d5e002020-03-06 21:07:09 +0530211Test Disable and Enable ONU for DT
212 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
213 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
214 ... Perform disable on the ONUs and validate that the pings do not succeed
215 ... Perform enable on the ONUs and validate that the pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800216 [Tags] functionalDt DisableEnableONUDt soak
Andy Baviere187eda2020-04-20 15:00:02 -0700217 [Setup] Start Logging DisableEnableONUDt
Hardik Windlass43531332021-05-19 07:07:03 +0000218 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass63d5e002020-03-06 21:07:09 +0530219 ... AND Stop Logging DisableEnableONUDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800220 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530221 ${src}= Set Variable ${hosts.src[${I}]}
222 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800223 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530224 ${onu_device_id}= Get Device ID From SN ${src['onu']}
225 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
226 ... ${of_id}
227 Disable Device ${onu_device_id}
228 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
229 ... Validate Device DISABLED UNKNOWN
230 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-admin-lock
231 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000232 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530233 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass63d5e002020-03-06 21:07:09 +0530234 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
235 ... Wait Until Keyword Succeeds 60s 2s
236 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
237 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
238 Sleep 5s
239 Enable Device ${onu_device_id}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700240 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530241 ... Validate Device ENABLED ACTIVE
242 ... REACHABLE ${src['onu']} onu=True onu_reason=onu-reenabled
243 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000244 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530245 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass63d5e002020-03-06 21:07:09 +0530246 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
247 ... Wait Until Keyword Succeeds 60s 2s
248 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
249 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530250 END
251
Hardik Windlassaaea3402020-03-10 19:45:45 +0530252Test Disable and Delete OLT for DT
253 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
254 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
255 ... Perform disable on the OLT and validate ONUs state and that the pings do not succeed
256 ... Perform delete on the OLT, Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Hardik Windlass43531332021-05-19 07:07:03 +0000257 [Tags] functionalDt DisableDeleteOLTDt soak
Suchitra Vemuri221398a2020-05-29 22:45:17 -0700258 [Setup] Start Logging DisableDeleteOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000259 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassaaea3402020-03-10 19:45:45 +0530260 ... AND Stop Logging DisableDeleteOLTDt
Hardik Windlassaaea3402020-03-10 19:45:45 +0530261 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800262 FOR ${I} IN RANGE 0 ${olt_count}
263 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
264 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
265 Disable Device ${olt_device_id}
266 ${of_id}= Get ofID From OLT List ${olt_serial_number}
267 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
268 ... Validate OLT Device DISABLED UNKNOWN REACHABLE
269 ... ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800270 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
271 # Validate ONUs
272 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONUs After OLT Disable
Andrea Campanella4e507882020-11-26 11:33:11 +0100273 ... ${num_onus} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800274 # Verify ONOS Flows
275 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
276 ${onos_flows_count}= Evaluate 4 * ${num_onus}
277 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
278 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
279 ... ${of_id} ${onos_flows_count}
280 # Verify VOLTHA Flows
281 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
282 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
283 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
284 ${onu_flows}= Set Variable 2
285 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
286 ... ${olt_device_id}
287 ${List_ONU_Serial} Create List
288 Set Suite Variable ${List_ONU_Serial}
Andrea Campanella99a548b2020-11-18 09:50:32 +0100289 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800290 Log ${List_ONU_Serial}
291 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
292 ... ${List_ONU_Serial} ${onu_flows}
293 # Delete OLT and Validate Empty Device List
294 Delete Device ${olt_device_id}
Andrea Campanella4e507882020-11-26 11:33:11 +0100295 # Check that the OLT and the ONUs are actually removed from the system
296 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed
297 ... ${olt_serial_number}
298 Run Keyword and Continue On Failure Validate all ONUS for OLT Removed ${num_all_onus} ${hosts}
299 ... ${olt_serial_number} ${timeout}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800300 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
301 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800302 END
Hardik Windlassaaea3402020-03-10 19:45:45 +0530303 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Hardik Windlass43531332021-05-19 07:07:03 +0000304 Run Keyword Setup ${SOAK_TEST}
Suchitra Vemuriae9cecb2020-03-12 12:59:14 -0700305 Run Keyword If ${has_dataplane} Clean Up Linux
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800306 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
307 #Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlassaaea3402020-03-10 19:45:45 +0530308
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530309Test Disable and Enable OLT for DT
310 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
311 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
312 ... Perform disable on the OLT and validate that the pings do not succeed
313 ... Perform enable on the OLT and validate that the pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800314 [Tags] functionalDt DisableEnableOLTDt soak
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530315 [Setup] Start Logging DisableEnableOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000316 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530317 ... AND Stop Logging DisableEnableOLTDt
318 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800319 FOR ${I} IN RANGE 0 ${olt_count}
320 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
321 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
322 ${rc} ${output}= Run and Return Rc and Output
323 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
324 Should Be Equal As Integers ${rc} 0
325 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
326 ... ${olt_serial_number}
327 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800328 # Validate ONUs
329 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530330 ${src}= Set Variable ${hosts.src[${I}]}
331 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800332 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530333 ${onu_device_id}= Get Device ID From SN ${src['onu']}
334 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
335 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
336 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000337 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530338 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
339 ... Wait Until Keyword Succeeds 60s 2s
340 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
341 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
342 # Remove Subscriber Access (To replicate DT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000343 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530344 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
345 # Delete ONU Device (To replicate DT workflow)
346 Delete Device ${onu_device_id}
347 END
Hardik Windlass2b37e712020-06-12 02:13:17 +0530348 Sleep 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530349 # Enable the OLT back and check ONU, OLT status are back to "ACTIVE"
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800350 FOR ${I} IN RANGE 0 ${olt_count}
351 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
352 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
353 Enable Device ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800354 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
355 ... ${olt_serial_number}
356 #TODO: Update for PON_OLT ETHERNET_NNI
357 #Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Port Types
358 #... PON_OLT ETHERNET_NNI
359 END
Hardik Windlass7c801e62020-05-04 19:33:21 +0530360 # Waiting extra time for the ONUs to come up
361 Sleep 60s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800362 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass7c801e62020-05-04 19:33:21 +0530363 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530364
365Test Delete and ReAdd OLT for DT
366 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
367 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
368 ... Disable and Delete the OLT
369 ... Create/Enable the same OLT again
370 ... Validate DHCP/E2E pings succeed for all the ONUs connected to the OLT
Hardik Windlass43531332021-05-19 07:07:03 +0000371 [Tags] functionalDt DeleteReAddOLTDt soak
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530372 [Setup] Start Logging DeleteReAddOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000373 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530374 ... AND Stop Logging DeleteReAddOLTDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800375 FOR ${I} IN RANGE 0 ${olt_count}
376 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
377 ${of_id}= Get ofID From OLT List ${olt_serial_number}
378 Delete Device and Verify ${olt_serial_number}
379 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
380 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800381 END
382 # Recreate the OLTs
Hardik Windlass43531332021-05-19 07:07:03 +0000383 Setup ${SOAK_TEST}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800384 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530385 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
386
387Test Disable ONUs and OLT Then Delete ONUs and OLT for DT
388 [Documentation] On deployed POD, disable the ONU, disable the OLT and then delete ONU and OLT.
389 ... This TC is to confirm that ONU removal is not impacting OLT
390 ... Devices will be removed during the execution of this TC
391 ... so calling setup at the end to add the devices back to avoid the confusion.
392 [Tags] functionalDt DisableDeleteONUOLTDt
393 [Setup] Start Logging DisableDeleteONUOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000394 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530395 ... AND Stop Logging DisableDeleteONUOLTDt
Suchitra Vemuri02170552021-03-23 16:40:50 -0700396 @{onu_reason}= Create List initial-mib-downloaded omci-flows-pushed
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800397 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530398 ${src}= Set Variable ${hosts.src[${I}]}
399 ${dst}= Set Variable ${hosts.dst[${I}]}
400 ${onu_device_id}= Get Device ID From SN ${src['onu']}
401 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
402 ... Validate Device ENABLED ACTIVE
Suchitra Vemuri02170552021-03-23 16:40:50 -0700403 ... REACHABLE ${src['onu']} onu=True onu_reason=${onu_reason}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530404 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
405 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800406 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530407 Disable Device ${onu_device_id}
408 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
409 ... Validate Device DISABLED UNKNOWN
410 ... REACHABLE ${src['onu']} onu=false
411 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
412 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800413 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530414 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800415 # Disable all OLTs
416 FOR ${I} IN RANGE 0 ${olt_count}
417 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
418 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
419 ${rc} ${output}= Run and Return Rc and Output
420 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
421 Should Be Equal As Integers ${rc} 0
422 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
423 ... ${olt_serial_number}
424 END
425 # Validate ONUs after OLT disable
426 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530427 ${src}= Set Variable ${hosts.src[${I}]}
428 ${dst}= Set Variable ${hosts.dst[${I}]}
429 ${onu_device_id}= Get Device ID From SN ${src['onu']}
430 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
431 ... Validate Device DISABLED DISCOVERED
432 ... UNREACHABLE ${src['onu']} onu=false
433 Delete Device ${onu_device_id}
434 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
435 ... Validate OLT Device DISABLED UNKNOWN
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800436 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530437 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800438 # Delete all OLTs
439 Delete All Devices and Verify
440
441 #Delete Device ${olt_device_id}
442 #TODO: Fix the following assertion
443 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Test Empty Device List
444 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
445 #... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
446
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530447 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
448 Run Keyword Setup
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800449 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530450 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530451
Andy Baviere19991a2020-05-08 10:42:40 -0700452Data plane verification using TCP for DT
453 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
454 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Matteo Scandoloab48f9e2021-06-11 17:08:00 +0200455 [Tags] non-critical dataplaneDt BandwidthProfileTCPDt VOL-3061 soakDataplane
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700456 [Setup] Start Logging BandwidthProfileTCPDt
Hardik Windlass43531332021-05-19 07:07:03 +0000457 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700458 ... AND Stop Logging BandwidthProfileTCPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700459 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
460 ... physical pod. Skipping this test in BBSIM.
Hardik Windlass3280f2d2021-05-20 07:38:31 +0000461 Run Keyword If '${SOAK_TEST}'=='False' Clear All Devices Then Create New Device
Hardik Windlass62db9d92021-05-17 09:32:40 +0000462 ... ELSE Setup Soak
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800463 Run Keyword If ${has_dataplane} Clean Up Linux
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800464 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
465
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800466 #${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
467 #... ${olt_serial_number}
468 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700469 ${src}= Set Variable ${hosts.src[${I}]}
470 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800471 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavierf6ab19c2020-05-14 10:34:47 -0700472 # Check for iperf3 and jq tools
473 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
474 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
475 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
476
Andy Baviere19991a2020-05-08 10:42:40 -0700477 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
478 ... ${of_id}
479 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
480 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
481 ... upstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700482 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
483 ... ${bandwidth_profile_name}
484 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700485 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
486 ... downstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700487 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
488 ... ${bandwidth_profile_name}
489 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700490
491 # Stream TCP packets from RG to server
492 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
493 ... args=-t 30
494 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
495
496 # Stream TCP packets from server to RG
497 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
498 ... args=-R -t 30
499 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
500
501 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
502 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
503 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
504 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
505
506 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
507 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700508 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
509 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
510 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700511 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
512 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
513 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
514 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
515 END
516
517Data plane verification using UDP for DT
518 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
519 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Matteo Scandoloab48f9e2021-06-11 17:08:00 +0200520 [Tags] non-critical dataplaneDt BandwidthProfileUDPDt VOL-3061 soakDataplane
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700521 [Setup] Start Logging BandwidthProfileUDPDt
Hardik Windlass43531332021-05-19 07:07:03 +0000522 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700523 ... AND Stop Logging BandwidthProfileUDPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700524 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
525 ... physical pod. Skipping this test in BBSIM.
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800526 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700527 ${src}= Set Variable ${hosts.src[${I}]}
528 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800529 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700530
531 # Check for iperf3 and jq tools
532 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
533 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
534 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
535
Andy Baviere19991a2020-05-08 10:42:40 -0700536 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
537 ... ${of_id}
538 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
539 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
540 ... upstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700541 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
542 ... ${bandwidth_profile_name}
543 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700544 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
545 ... downstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700546 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
547 ... ${bandwidth_profile_name}
548 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700549
550 # Stream UDP packets from RG to server
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200551 ${uprate}= Run Keyword If ${limiting_bw_value_upstream} != 1000000
552 ... Evaluate ${limiting_bw_value_upstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200553 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200554 ... Set Variable ${limiting_bw_value_upstream}
Andrea Campanella580e0492020-08-05 15:35:48 +0200555
Andy Baviere19991a2020-05-08 10:42:40 -0700556 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700557 ... args=-u -b ${uprate}K -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700558 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
559 ${actual_upstream_bw_used}= Evaluate
560 ... (100 - ${updict['end']['sum']['lost_percent']})*${updict['end']['sum']['bits_per_second']}/100000
561
562 # Stream UDP packets from server to RG
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200563 ${dnrate}= Run Keyword If ${limiting_bw_value_dnstream} != 1000000
564 ... Evaluate ${limiting_bw_value_dnstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200565 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200566 ... Set Variable ${limiting_bw_value_dnstream}
Andy Baviere19991a2020-05-08 10:42:40 -0700567 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700568 ... args=-u -b ${dnrate}K -R -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700569 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
570 ${actual_dnstream_bw_used}= Evaluate
571 ... (100 - ${dndict['end']['sum']['lost_percent']})*${dndict['end']['sum']['bits_per_second']}/100000
572
573 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
574 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
575 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
576 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
577
578 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
579 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700580 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
581 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
582 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700583 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
584 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
585 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
586 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
587 END
588
Andy Bavier7613b9a2020-07-08 07:25:47 -0700589Validate parsing of data traffic through voltha using tech profile
590 [Documentation] Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
591 ... Prerequisite tools : Tcpdump and Mausezahn traffic generator on both RG and DHCP/BNG VMs
592 ... Install jq tool to read json file, where test suite is being running
Girish Gowdrabbfbbc32021-05-17 14:36:58 -0700593 ... This test sends TCP packets with pbits between 0 and 7 and validates that
Andy Bavier7613b9a2020-07-08 07:25:47 -0700594 ... the pbits are preserved by the PON.
Hardik Windlass62db9d92021-05-17 09:32:40 +0000595 [Tags] dataplaneDt TechProfileDt VOL-3291 soakDataplane
Andy Bavier7613b9a2020-07-08 07:25:47 -0700596 [Setup] Start Logging TechProfileDt
Hardik Windlass43531332021-05-19 07:07:03 +0000597 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavier7613b9a2020-07-08 07:25:47 -0700598 ... AND Stop Logging TechProfileDt
599 Pass Execution If '${has_dataplane}'=='False'
600 ... Skipping test: Technology profile validation can be done only in physical pod
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800601 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700602 ${src}= Set Variable ${hosts.src[${I}]}
603 ${dst}= Set Variable ${hosts.dst[${I}]}
604
Andy Bavier275414a2020-07-16 13:07:17 -0700605 ${src_iface_name}= Fetch From Left ${src['dp_iface_name']} .
606
Andy Bavier7613b9a2020-07-08 07:25:47 -0700607 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
608 ${bng_user}= Get Variable Value ${dst['noroot_user']}
609 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
610 Pass Execution If "${bng_ip}" == "${NONE}" or "${bng_user}" == "${NONE}" or "${bng_pass}" == "${NONE}"
611 ... Skipping test: credentials for BNG login required in deployment config
612
613 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
614 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
615 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the RG
616 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
617 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
618 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the BNG
619 Log Upstream test
620 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Andy Bavier275414a2020-07-16 13:07:17 -0700621 ... ${dst['dp_iface_ip_qinq']} ${dst['dp_iface_name']} ${src_iface_name}
Girish Gowdra66cd95d2021-07-08 10:31:54 -0700622 ... 0 tcp ${src['c_tag']} ${src['s_tag']} upstream vlan
Andy Bavier7613b9a2020-07-08 07:25:47 -0700623 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
624 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
625 Log Downstream test
626 ${rg_ip} ${stderr} ${rc}= Execute Remote Command
627 ... ifconfig ${src['dp_iface_name']} | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }'
628 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
629 Should Be Equal As Integers ${rc} 0 Could not get RG's IP address
630 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Girish Gowdra66cd95d2021-07-08 10:31:54 -0700631 ... ${rg_ip} ${src_iface_name} ${dst['dp_iface_name']}
632 ... 0 tcp ${src['c_tag']} ${src['s_tag']} downstream tcp
Andy Bavier7613b9a2020-07-08 07:25:47 -0700633 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
634 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
635 END
636
Hardik Windlass16cdf962020-04-29 15:26:50 +0530637Test Disable and Enable OLT PON Port for DT
638 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
639 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
640 ... Perform disable on the OLT PON Port and validate that the pings do not succeed
641 ... Perform enable on the OLT PON Port and validate that the pings are successful
Hardik Windlass43531332021-05-19 07:07:03 +0000642 [Tags] functionalDt DisableEnableOltPonPortDt VOL-2577 soak
Hardik Windlass16cdf962020-04-29 15:26:50 +0530643 [Setup] Start Logging DisableEnableOltPonPortDt
Hardik Windlass43531332021-05-19 07:07:03 +0000644 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass16cdf962020-04-29 15:26:50 +0530645 ... AND Stop Logging DisableEnableOltPonPortDt
Hardik Windlass41701e82021-01-12 17:44:44 +0000646 FOR ${I} IN RANGE 0 ${olt_count}
647 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
648 Disable Enable PON Port Per OLT DT ${olt_serial_number}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530649 END
650
Hardik Windlass91cc5292021-07-26 10:09:40 +0000651Data plane Bandwidth profile update verification for DT
652 [Documentation] Test bandwidth profile is updated for one subscriber and not changed for other subscribers.
653 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
654 ... Assumes Default and User_Bandwidth2 profiles are configured as bandwidth profiles
655 [Tags] non-critical dataplaneDt BandwidthProfileUpdateTCPDt VOL-2549
656 [Setup] Start Logging BandwidthProfileUpdateTCPDt
657 [Teardown] Run Keywords Collect Logs
658 ... AND Stop Logging BandwidthProfileUpdateTCPDt
659 ... AND Send File To Onos ${CURDIR}/../../tests/data/${POD_NAME}-sadis-DT.json
660 Pass Execution If '${has_dataplane}'=='False'
661 ... Bandwidth profile validation can be done only in physical pod. Skipping this test in BBSIM.
662 Delete All Devices And Verify
663 Run Keyword If ${has_dataplane} Clean Up Linux
664 Setup
665 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test DT
666 # Update the Bandwidth Profile for the First Subscriber under test
667 ${src}= Set Variable ${hosts.src[${0}]}
668 ${dst}= Set Variable ${hosts.dst[${0}]}
669 ${of_id}= Get ofID From OLT List ${src['olt']}
670 ${onu_device_id}= Get Device ID From SN ${src['onu']}
671 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
672 ... ${of_id} ${src['uni_id']}
673 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
674 ${oldBwName} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id} upstreamBandwidthProfile
675 # Delete the existing subscriber
676 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
677 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
678 # Verify VOLTHA flows for ONU under test is Zero
679 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
680 ... ${onu_device_id} 0
681 # Disable and Re-Enable the ONU (To replicate DT current workflow)
682 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
683 Disable Device ${onu_device_id}
684 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
685 ... Validate Device DISABLED UNKNOWN
686 ... REACHABLE ${src['onu']}
687 Enable Device ${onu_device_id}
688 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
689 ... Validate Device ENABLED ACTIVE
690 ... REACHABLE ${src['onu']}
691 # Change the bandwidth profile and load the configuration
692 ${newBwName} Set Variable If ${oldBwName} == 'Default' 'User_Bandwidth2' 'Default'
693 ${cmd} Catenate
694 ... sed 's/upstreamBandwidthProfile": "${oldBwName}"/upstreamBandwidthProfile": "${newBwName}"/g'
695 ... ${CURDIR}/../../tests/data/${POD_NAME}-sadis-DT.json > ${CURDIR}/../../tests/data/${POD_NAME}-sadis-new.json
696 ${rc} Run and Return RC ${cmd}
697 Send File To Onos ${CURDIR}/../../tests/data/${POD_NAME}-sadis-new.json
698 # Re-add the subscriber with new bandwidth profile
699 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
700 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
701 # Verify subscriber access flows are added for the ONU port
702 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
703 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
704 ... ${onu_port} ${nni_port} ${src['s_tag']}
705 # Verify ONU state in voltha
706 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
707 ... ENABLED ACTIVE REACHABLE
708 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
709 # Verify Meters in ONOS
710 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
711 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
712 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
713 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
714 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
715 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
716 ... ${dst['container_name']}
717 # Verify new bandwidth profile is applied and other subscribers are working fine
718 ${checkBwName} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id} upstreamBandwidthProfile
719 Should Be Equal ${checkBwName} ${newBwName} The bandwidth profile is not updated properly
720 FOR ${I} IN RANGE 0 ${num_all_onus}
721 ${src}= Set Variable ${hosts.src[${I}]}
722 ${dst}= Set Variable ${hosts.dst[${I}]}
723 ${of_id}= Get ofID From OLT List ${src['olt']}
724 # Check for iperf3 and jq tools
725 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
726 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
727 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
728
729 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
730 ... ${of_id}
731 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
732 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
733 ... upstreamBandwidthProfile
734 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
735 ... ${bandwidth_profile_name}
736 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
737 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
738 ... downstreamBandwidthProfile
739 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
740 ... ${bandwidth_profile_name}
741 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
742
743 # Stream TCP packets from RG to server
744 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
745 ... args=-t 30
746 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
747
748 # Stream TCP packets from server to RG
749 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
750 ... args=-R -t 30
751 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
752
753 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
754 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
755 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
756 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
757
758 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
759 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
760 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
761 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
762 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
763 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
764 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
765 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
766 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
767 END
768
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000769*** Keywords ***
770Setup Suite
771 [Documentation] Set up the test suite
772 Common Test Suite Setup
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -0700773 #Restore all ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800774 #Run Keyword If ${has_dataplane} RestoreONUs ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -0700775 #power_switch.robot needs it to support different vendor's power switch
776 ${switch_type}= Get Variable Value ${web_power_switch.type}
777 Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000778
779Clear All Devices Then Create New Device
780 [Documentation] Remove any devices from VOLTHA and ONOS
781 # Remove all devices from voltha and nos
782 Delete All Devices and Verify
783 # Execute normal test Setup Keyword
784 Setup