blob: e04554b6e2cc36aeeec1b017566a26458c85075c [file] [log] [blame]
Joey Armstrong9fadcbe2024-01-17 19:00:37 -05001# Copyright 2017-2024 Open Networking Foundation (ONF) and the ONF Contributors
Hardik Windlassa3d04b92020-02-17 15:06:05 +00002#
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
Hardik Windlass4288c6a2021-09-28 07:22:06 +000045${INFRA_NAMESPACE} default
Hardik Windlassa3d04b92020-02-17 15:06:05 +000046# For below variable value, using deployment name as using grep for
47# parsing radius pod name, we can also use full radius pod name
48${RESTART_POD_NAME} radius
Hardik Windlass5d537ad2021-11-16 06:01:54 +000049${timeout} 60s
Hardik Windlassa3d04b92020-02-17 15:06:05 +000050${of_id} 0
51${logical_id} 0
Andrea Campanella86e24062020-08-05 19:09:18 +020052${uprate} 0
53${dnrate} 0
Hardik Windlassa3d04b92020-02-17 15:06:05 +000054${has_dataplane} True
Hardik Windlassffbf0602020-04-24 23:14:45 +053055${teardown_device} True
Hardik Windlassa3d04b92020-02-17 15:06:05 +000056${scripts} ../../scripts
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000057# flag to reboot OLT through Power Switch
58${power_cycle_olt} False
Hardik Windlassa3d04b92020-02-17 15:06:05 +000059
Andy Baviere19991a2020-05-08 10:42:40 -070060# For dataplane bandwidth testing
61${upper_margin_pct} 105 # Allow 5% over the limit
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080062${lower_margin_pct} 90 # Allow 8% under the limit
Andy Baviere19991a2020-05-08 10:42:40 -070063${udp_rate_multiplier} 1.10 # Send UDP at bw profile limit * rate_multiplier
Andy Bavierc80a2742020-08-28 10:59:05 -070064${udp_packet_bytes} 1470 # UDP payload in bytes
Andy Baviere19991a2020-05-08 10:42:40 -070065
Hardik Windlassa3d04b92020-02-17 15:06:05 +000066# Per-test logging on failure is turned off by default; set this variable to enable
67${container_log_dir} ${None}
68
Hardik Windlass43531332021-05-19 07:07:03 +000069# logging flag to enable Collect Logs, can be passed via the command line too
70# example: -v logging:False
71${logging} True
72
Hardik Windlass4ed54502021-05-14 07:34:15 +000073# Flag specific to Soak Jobs
74${SOAK_TEST} False
75${bbsim_port} 50060
76
Hardik Windlassa3d04b92020-02-17 15:06:05 +000077*** Test Cases ***
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000078Reboot DT ONUs and OLTs Physically
79 [Documentation] This test reboots ONUs and OLTs physically before execution all the tests
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070080 ... Test case runs only on the PODs that are configured with PowerSwitch that
81 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000082 [Tags] functionalDt PowerSwitch RebootAllDTONUsOLTs soak
83 [Setup] Start Logging RebootAllDTONUsOLTs
Hardik Windlass43531332021-05-19 07:07:03 +000084 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassc4d1fd62022-04-12 13:12:28 +000085 ... AND Stop Logging RebootAllDTONUsOLTs
86 Perform Reboot ONUs and OLTs Physically ${power_cycle_olt}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070087
Hardik Windlass4ed54502021-05-14 07:34:15 +000088Create Soak BBSim Device
89 [Documentation] This creates and enables the BBSim device as required by the soak testing
90 ... The BBSim OLT and ONUs created as part of this test are not part of active testing
91 ... but only to mock the load on Soak POD.
92 [Tags] soak
93 [Setup] Start Logging soakPodCreateBBSimLoad
Hardik Windlass43531332021-05-19 07:07:03 +000094 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass4ed54502021-05-14 07:34:15 +000095 ... AND Stop Logging soakPodCreateBBSimLoad
96 ${num_bbsim} Get Length ${bbsim}
Hardik Windlassea4caf72021-07-30 07:22:12 +000097 @{bbsim_olt_of_id_list}= Create List
Hardik Windlass4ed54502021-05-14 07:34:15 +000098 FOR ${I} IN RANGE 0 ${num_bbsim}
99 ${ip} Evaluate ${bbsim}[${I}].get("ip")
100 ${serial_number} Evaluate ${bbsim}[${I}].get("serial")
101 ${bbsim_olt_device_id}= Create Device ${ip} ${bbsim_port}
102 Log ${bbsim_olt_device_id}
103 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass8b446492021-06-10 06:25:23 +0000104 ... Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN ${bbsim_olt_device_id} by_dev_id=True
Hardik Windlass4ed54502021-05-14 07:34:15 +0000105 Enable Device ${bbsim_olt_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000106 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass4ed54502021-05-14 07:34:15 +0000107 ... Validate OLT Device ENABLED ACTIVE REACHABLE ${serial_number}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000108 ${bbsim_olt_of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
Hardik Windlass4ed54502021-05-14 07:34:15 +0000109 ... ${serial_number}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000110 Log ${bbsim_olt_of_id}
111 Append To List ${bbsim_olt_of_id_list} ${bbsim_olt_of_id}
Hardik Windlass4ed54502021-05-14 07:34:15 +0000112 END
113 # Extra sleep time for ONUs to come up Active
Hardik Windlassea4caf72021-07-30 07:22:12 +0000114 Sleep 60s
115 FOR ${bbsim_olt_of_id} IN @{bbsim_olt_of_id_list}
116 Provision all subscribers on device ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${ONOS_SSH_IP} ${ONOS_REST_PORT}
117 ... ${bbsim_olt_of_id}
118 ${total_onus_per_bbsim_olt}= Count Enabled UNI Ports ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
119 ... ${bbsim_olt_of_id}
120 Wait for all flows to in ADDED state ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
121 ... ${bbsim_olt_of_id} dt ${total_onus_per_bbsim_olt} 1 true
122 ... false false false true
123 END
Hardik Windlass4ed54502021-05-14 07:34:15 +0000124
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000125Sanity E2E Test for OLT/ONU on POD for DT
126 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
127 ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
128 ... Traffic sent with same vlan from different RGs,
129 ... should reach the NNI port on the OLT with the expected double tagged vlan ids
130 ... Inner vlans from the RG should not change
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800131 [Tags] sanityDt soak
Hardik Windlass4ed54502021-05-14 07:34:15 +0000132 [Setup] Start Logging SanityTestDt
Hardik Windlass43531332021-05-19 07:07:03 +0000133 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000134 ... AND Stop Logging SanityTestDt
Hardik Windlass4ed54502021-05-14 07:34:15 +0000135 Setup ${SOAK_TEST}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000136 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000137 Perform Sanity Test DT
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000138
Hardik Windlass35706ba2020-02-20 08:16:42 +0000139Test Subscriber Delete and Add for DT
140 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
Hardik Windlass63d5e002020-03-06 21:07:09 +0530141 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
Hardik Windlass35706ba2020-02-20 08:16:42 +0000142 ... Delete a subscriber and validate that the pings do not succeed and state is purged
143 ... Disable and Enable the ONU (This is to replicate the existing DT behaviour)
144 ... Re-add the subscriber, and validate that the flows are present and pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800145 [Tags] functionalDt SubAddDeleteDt soak
Girish Gowdrafbdddc12021-12-17 15:39:55 +0530146 [Setup] Run Keywords Start Logging SubAddDeleteDt
147 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000148 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass35706ba2020-02-20 08:16:42 +0000149 ... AND Stop Logging SubAddDeleteDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800150 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000151 ${src}= Set Variable ${hosts.src[${I}]}
152 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800153 ${of_id}= Get ofID From OLT List ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +0000154 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000155 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800156 ${olt_device_id}= Get OLTDeviceID From OLT List ${src['olt']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100157 ${num_of_olt_onus}= Get Num of Onus From OLT SN ${src['olt']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000158 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000159 ... ${of_id} ${src['uni_id']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000160 # Remove Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000161 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000162 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000163 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000164 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000165 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
166 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100167
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530168 # 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 +0100169 ${onos_flows_count}= Evaluate 4 * ( ${num_of_olt_onus} - 1 )
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530170 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
171 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Suchitra Vemuri93db32b2020-11-23 21:27:05 -0800172 ... ${of_id} ${onos_flows_count}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000173 # 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 +0100174 ${olt_flows}= Evaluate 2 * ( ${num_of_olt_onus} - 1 ) + 1
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000175 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
176 ... ${olt_flows} ${olt_device_id}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000177 # Verify VOLTHA flows for ONU under test is Zero
178 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
179 ... ${onu_device_id} 0
180 # Disable and Re-Enable the ONU (To replicate DT current workflow)
181 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
182 Disable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000183 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000184 ... Validate Device DISABLED UNKNOWN
185 ... REACHABLE ${src['onu']}
186 Enable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000187 Wait Until Keyword Succeeds 360s 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000188 ... Validate Device ENABLED ACTIVE
189 ... REACHABLE ${src['onu']}
190 # Add Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000191 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000192 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530193 # Verify subscriber access flows are added for the ONU port
194 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass25e11702020-03-30 20:05:19 +0530195 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
196 ... ${onu_port} ${nni_port} ${src['s_tag']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000197 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000198 ... Validate Device ENABLED ACTIVE
199 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
Girish Gowdrad2c0e9d2021-11-23 14:40:23 -0800200 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
201 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
202 # Workaround ends here for issue seen in VOL-4489.
Hardik Windlass35706ba2020-02-20 08:16:42 +0000203 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000204 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000205 ... 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
Girish Gowdra8fd96962021-12-14 16:20:04 +0530217 [Setup] Run Keywords Start Logging DisableEnableONUDt
218 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000219 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass63d5e002020-03-06 21:07:09 +0530220 ... AND Stop Logging DisableEnableONUDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800221 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530222 ${src}= Set Variable ${hosts.src[${I}]}
223 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800224 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530225 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000226 ... ${of_id} ${src['uni_id']}
Hardik Windlass78bb0fd2022-06-21 15:11:54 +0530227 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530228 Disable Device ${onu_device_id}
229 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
230 ... Validate Device DISABLED UNKNOWN
Andrea Campanellaa0c26552022-05-09 09:58:34 +0200231 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-admin-lock
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000232 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000233 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530234 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass63d5e002020-03-06 21:07:09 +0530235 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000236 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530237 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
238 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
239 Sleep 5s
240 Enable Device ${onu_device_id}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700241 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530242 ... Validate Device ENABLED ACTIVE
243 ... REACHABLE ${src['onu']} onu=True onu_reason=onu-reenabled
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000244 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000245 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Girish Gowdrac38824c2021-12-01 13:22:08 +0530246 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
247 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
248 # Workaround ends here for issue seen in VOL-4489.
Hardik Windlass63d5e002020-03-06 21:07:09 +0530249 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000250 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530251 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
252 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530253 END
254
Hardik Windlassaaea3402020-03-10 19:45:45 +0530255Test Disable and Delete OLT for DT
256 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
257 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
258 ... Perform disable on the OLT and validate ONUs state and that the pings do not succeed
259 ... Perform delete on the OLT, Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Hardik Windlass43531332021-05-19 07:07:03 +0000260 [Tags] functionalDt DisableDeleteOLTDt soak
Suchitra Vemuri221398a2020-05-29 22:45:17 -0700261 [Setup] Start Logging DisableDeleteOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000262 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassaaea3402020-03-10 19:45:45 +0530263 ... AND Stop Logging DisableDeleteOLTDt
Hardik Windlassaaea3402020-03-10 19:45:45 +0530264 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800265 FOR ${I} IN RANGE 0 ${olt_count}
266 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
267 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
268 Disable Device ${olt_device_id}
269 ${of_id}= Get ofID From OLT List ${olt_serial_number}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000270 Wait Until Keyword Succeeds ${timeout} 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800271 ... Validate OLT Device DISABLED UNKNOWN REACHABLE
272 ... ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800273 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
274 # Validate ONUs
275 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONUs After OLT Disable
Andrea Campanella4e507882020-11-26 11:33:11 +0100276 ... ${num_onus} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800277 # Verify ONOS Flows
TorstenThieme970b71b2022-07-13 10:31:34 +0000278 # Number of Access Flows on ONOS equals 4 * the Number of Active ONUs (2 for each downstream and upstream)
279 ${onos_flows_count}= Evaluate 4 * ${num_onus}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800280 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
281 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
TorstenThieme970b71b2022-07-13 10:31:34 +0000282 ... ${of_id} ${onos_flows_count}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800283 # Verify VOLTHA Flows
TorstenThieme970b71b2022-07-13 10:31:34 +0000284 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
285 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
286 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
287 ${onu_flows}= Set Variable 2
Andrea Campanella753510e2022-04-28 23:26:27 +0200288 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
TorstenThieme970b71b2022-07-13 10:31:34 +0000289 ... ${olt_flows} ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800290 ${List_ONU_Serial} Create List
291 Set Suite Variable ${List_ONU_Serial}
Andrea Campanella99a548b2020-11-18 09:50:32 +0100292 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800293 Log ${List_ONU_Serial}
294 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
TorstenThieme970b71b2022-07-13 10:31:34 +0000295 ... ${List_ONU_Serial} ${onu_flows}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800296 # Delete OLT and Validate Empty Device List
297 Delete Device ${olt_device_id}
Andrea Campanella4e507882020-11-26 11:33:11 +0100298 # Check that the OLT and the ONUs are actually removed from the system
299 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed
300 ... ${olt_serial_number}
301 Run Keyword and Continue On Failure Validate all ONUS for OLT Removed ${num_all_onus} ${hosts}
302 ... ${olt_serial_number} ${timeout}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000303 Wait Until Keyword Succeeds ${timeout} 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800304 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800305 END
Hardik Windlassaaea3402020-03-10 19:45:45 +0530306 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Hardik Windlass43531332021-05-19 07:07:03 +0000307 Run Keyword Setup ${SOAK_TEST}
Suchitra Vemuriae9cecb2020-03-12 12:59:14 -0700308 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000309 Perform Sanity Test DT
Hardik Windlassaaea3402020-03-10 19:45:45 +0530310
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530311Test Disable and Enable OLT for DT
312 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
313 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
314 ... Perform disable on the OLT and validate that the pings do not succeed
315 ... Perform enable on the OLT and validate that the pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800316 [Tags] functionalDt DisableEnableOLTDt soak
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530317 [Setup] Start Logging DisableEnableOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000318 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530319 ... AND Stop Logging DisableEnableOLTDt
320 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800321 FOR ${I} IN RANGE 0 ${olt_count}
322 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
323 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
324 ${rc} ${output}= Run and Return Rc and Output
Jan Klarec92d6982023-09-05 14:46:52 +0200325 ... voltctl -c ${VOLTCTL_CONFIG} device disable ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800326 Should Be Equal As Integers ${rc} 0
327 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
328 ... ${olt_serial_number}
329 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800330 # Validate ONUs
331 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530332 ${src}= Set Variable ${hosts.src[${I}]}
333 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800334 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000335 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000336 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlass78bb0fd2022-06-21 15:11:54 +0530337 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000338 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000339 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530340 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000341 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass7c801e62020-05-04 19:33:21 +0530342 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
343 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
344 # Remove Subscriber Access (To replicate DT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000345 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530346 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
347 # Delete ONU Device (To replicate DT workflow)
348 Delete Device ${onu_device_id}
349 END
Hardik Windlass2b37e712020-06-12 02:13:17 +0530350 Sleep 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530351 # Enable the OLT back and check ONU, OLT status are back to "ACTIVE"
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800352 FOR ${I} IN RANGE 0 ${olt_count}
353 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
354 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
355 Enable Device ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800356 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
357 ... ${olt_serial_number}
358 #TODO: Update for PON_OLT ETHERNET_NNI
359 #Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Port Types
360 #... PON_OLT ETHERNET_NNI
361 END
Hardik Windlass7c801e62020-05-04 19:33:21 +0530362 # Waiting extra time for the ONUs to come up
363 Sleep 60s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800364 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000365 Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530366
367Test Delete and ReAdd OLT for DT
368 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
369 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
370 ... Disable and Delete the OLT
371 ... Create/Enable the same OLT again
372 ... Validate DHCP/E2E pings succeed for all the ONUs connected to the OLT
Hardik Windlass43531332021-05-19 07:07:03 +0000373 [Tags] functionalDt DeleteReAddOLTDt soak
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530374 [Setup] Start Logging DeleteReAddOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000375 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530376 ... AND Stop Logging DeleteReAddOLTDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800377 FOR ${I} IN RANGE 0 ${olt_count}
378 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
379 ${of_id}= Get ofID From OLT List ${olt_serial_number}
380 Delete Device and Verify ${olt_serial_number}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000381 Wait Until Keyword Succeeds ${timeout} 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800382 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800383 END
384 # Recreate the OLTs
Hardik Windlass43531332021-05-19 07:07:03 +0000385 Setup ${SOAK_TEST}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800386 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000387 Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530388
389Test Disable ONUs and OLT Then Delete ONUs and OLT for DT
390 [Documentation] On deployed POD, disable the ONU, disable the OLT and then delete ONU and OLT.
391 ... This TC is to confirm that ONU removal is not impacting OLT
392 ... Devices will be removed during the execution of this TC
393 ... so calling setup at the end to add the devices back to avoid the confusion.
394 [Tags] functionalDt DisableDeleteONUOLTDt
Girish Gowdra8fd96962021-12-14 16:20:04 +0530395 [Setup] Run Keywords Start Logging DisableDeleteONUOLTDt
396 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000397 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530398 ... AND Stop Logging DisableDeleteONUOLTDt
Suchitra Vemuri02170552021-03-23 16:40:50 -0700399 @{onu_reason}= Create List initial-mib-downloaded omci-flows-pushed
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800400 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530401 ${src}= Set Variable ${hosts.src[${I}]}
402 ${dst}= Set Variable ${hosts.dst[${I}]}
403 ${onu_device_id}= Get Device ID From SN ${src['onu']}
404 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
405 ... Validate Device ENABLED ACTIVE
Suchitra Vemuri02170552021-03-23 16:40:50 -0700406 ... REACHABLE ${src['onu']} onu=True onu_reason=${onu_reason}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000407 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530408 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800409 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530410 Disable Device ${onu_device_id}
411 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
412 ... Validate Device DISABLED UNKNOWN
413 ... REACHABLE ${src['onu']} onu=false
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000414 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530415 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800416 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530417 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800418 # Disable all OLTs
419 FOR ${I} IN RANGE 0 ${olt_count}
420 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
421 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
422 ${rc} ${output}= Run and Return Rc and Output
Jan Klarec92d6982023-09-05 14:46:52 +0200423 ... voltctl -c ${VOLTCTL_CONFIG} device disable ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800424 Should Be Equal As Integers ${rc} 0
425 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
426 ... ${olt_serial_number}
427 END
428 # Validate ONUs after OLT disable
429 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530430 ${src}= Set Variable ${hosts.src[${I}]}
431 ${dst}= Set Variable ${hosts.dst[${I}]}
432 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000433 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530434 ... Validate Device DISABLED DISCOVERED
435 ... UNREACHABLE ${src['onu']} onu=false
436 Delete Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000437 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530438 ... Validate OLT Device DISABLED UNKNOWN
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800439 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530440 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800441 # Delete all OLTs
442 Delete All Devices and Verify
443
444 #Delete Device ${olt_device_id}
445 #TODO: Fix the following assertion
446 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Test Empty Device List
447 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
448 #... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
449
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530450 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
451 Run Keyword Setup
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800452 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000453 Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530454
Andy Baviere19991a2020-05-08 10:42:40 -0700455Data plane verification using TCP for DT
456 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
457 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Matteo Scandoloab48f9e2021-06-11 17:08:00 +0200458 [Tags] non-critical dataplaneDt BandwidthProfileTCPDt VOL-3061 soakDataplane
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700459 [Setup] Start Logging BandwidthProfileTCPDt
Hardik Windlass43531332021-05-19 07:07:03 +0000460 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700461 ... AND Stop Logging BandwidthProfileTCPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700462 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
463 ... physical pod. Skipping this test in BBSIM.
Hardik Windlass3280f2d2021-05-20 07:38:31 +0000464 Run Keyword If '${SOAK_TEST}'=='False' Clear All Devices Then Create New Device
Hardik Windlass62db9d92021-05-17 09:32:40 +0000465 ... ELSE Setup Soak
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800466 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000467 Perform Sanity Test DT
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800468
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800469 #${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
470 #... ${olt_serial_number}
471 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700472 ${src}= Set Variable ${hosts.src[${I}]}
473 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800474 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavierf6ab19c2020-05-14 10:34:47 -0700475 # Check for iperf3 and jq tools
476 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
477 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
478 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
479
Andy Baviere19991a2020-05-08 10:42:40 -0700480 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000481 ... ${of_id} ${src['uni_id']}
Andy Baviere19991a2020-05-08 10:42:40 -0700482 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
483 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
484 ... upstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700485 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
486 ... ${bandwidth_profile_name}
487 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700488 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
489 ... downstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700490 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
491 ... ${bandwidth_profile_name}
492 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700493
494 # Stream TCP packets from RG to server
495 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
496 ... args=-t 30
497 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
498
499 # Stream TCP packets from server to RG
500 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
501 ... args=-R -t 30
502 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
503
504 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
505 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
506 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
507 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
508
509 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
510 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700511 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
512 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
513 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700514 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
515 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
516 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
517 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
518 END
519
520Data plane verification using UDP for DT
521 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
522 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Matteo Scandoloab48f9e2021-06-11 17:08:00 +0200523 [Tags] non-critical dataplaneDt BandwidthProfileUDPDt VOL-3061 soakDataplane
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700524 [Setup] Start Logging BandwidthProfileUDPDt
Hardik Windlass43531332021-05-19 07:07:03 +0000525 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700526 ... AND Stop Logging BandwidthProfileUDPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700527 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
528 ... physical pod. Skipping this test in BBSIM.
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800529 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700530 ${src}= Set Variable ${hosts.src[${I}]}
531 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800532 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700533
534 # Check for iperf3 and jq tools
535 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
536 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
537 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
538
Andy Baviere19991a2020-05-08 10:42:40 -0700539 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000540 ... ${of_id} ${src['uni_id']}
Andy Baviere19991a2020-05-08 10:42:40 -0700541 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
542 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
543 ... upstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700544 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
545 ... ${bandwidth_profile_name}
546 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700547 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
548 ... downstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700549 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
550 ... ${bandwidth_profile_name}
551 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700552
553 # Stream UDP packets from RG to server
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200554 ${uprate}= Run Keyword If ${limiting_bw_value_upstream} != 1000000
555 ... Evaluate ${limiting_bw_value_upstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200556 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200557 ... Set Variable ${limiting_bw_value_upstream}
Andrea Campanella580e0492020-08-05 15:35:48 +0200558
Andy Baviere19991a2020-05-08 10:42:40 -0700559 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700560 ... args=-u -b ${uprate}K -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700561 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
562 ${actual_upstream_bw_used}= Evaluate
563 ... (100 - ${updict['end']['sum']['lost_percent']})*${updict['end']['sum']['bits_per_second']}/100000
564
565 # Stream UDP packets from server to RG
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200566 ${dnrate}= Run Keyword If ${limiting_bw_value_dnstream} != 1000000
567 ... Evaluate ${limiting_bw_value_dnstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200568 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200569 ... Set Variable ${limiting_bw_value_dnstream}
Andy Baviere19991a2020-05-08 10:42:40 -0700570 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700571 ... args=-u -b ${dnrate}K -R -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700572 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
573 ${actual_dnstream_bw_used}= Evaluate
574 ... (100 - ${dndict['end']['sum']['lost_percent']})*${dndict['end']['sum']['bits_per_second']}/100000
575
576 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
577 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
578 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
579 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
580
581 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
582 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700583 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
584 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
585 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700586 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
587 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
588 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
589 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
590 END
591
Joey Armstrongb2151282023-01-12 09:38:28 -0500592Reconcile with data plane verification using TCP for DT
593 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber while reconciling openonu-adapter.
594 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
595 ... VOL-4829
596 [Tags] non-critical dataplaneDt ReconcileBandwidthProfileTCPPDt VOL-4829 soakDataplane
597 [Setup] Start Logging ReconcileBandwidthProfileTCPPDt
598 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
599 ... AND Stop Logging ReconcileBandwidthProfileTCPPDt
600 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
601 Log ${podStatusOutput}
602 ${countBeforeRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
603 ${cmdname}= Set Variable kubectl -n ${NAMESPACE} get pods -l app=adapter-open-onu -o name
604 ${cmddelete}= Set Variable sleep 10; kubectl -n ${NAMESPACE} delete pods -l app=adapter-open-onu
605 FOR ${I} IN RANGE 0 ${num_all_onus}
606 ${src}= Set Variable ${hosts.src[${I}]}
607 ${dst}= Set Variable ${hosts.dst[${I}]}
608 # Check for iperf3 and jq tools
609 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
610 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
611 Run Keyword If ${rc} != 0 Log iperf3 / jq not found on the RG
612 Continue For Loop If ${rc} != 0
613
614 # Read bandwidth profile per subscriber
615 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
616 ... ${of_id} ${src['uni_id']}
617 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
618 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
619 ... upstreamBandwidthProfile
620 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
621 ... ${bandwidth_profile_name}
622 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
623 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
624 ... downstreamBandwidthProfile
625 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
626 ... ${bandwidth_profile_name}
627 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
628
629 ${rc} ${namebefore}= Run and Return Rc and Output ${cmdname}
630 ${deleteOpenOnuAdapterHdl}= Start Process ${cmddelete} shell=true
631 Set Suite Variable ${deleteOpenOnuAdapterHdl}
632
633 # Stream TCP packets bidirectional
634 ${bidirdict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']} args=--bidir -t 30
635 # read and log up and down stream datarate just for info
636 ${actual_dnstream_bw_used}= Evaluate ${bidirdict['end']['sum_received']['bits_per_second']}/1000
637 ${actual_upstream_bw_used}= Evaluate ${bidirdict['end']['sum_sent']['bits_per_second']}/1000
638 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
639 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
640 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
641 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
642 # validate datarate per interval
643 ${result_interval}= Validate Performance Intervals ${bidirdict}
644 Should Be True ${result_interval} At least one transmission interval data rate was too less.
645 # end reconcile process and validate reconcilation by checking pod name
646 ${result}= Terminate Process ${deleteOpenOnuAdapterHdl}
647 LOG ${result}
648 ${rc} ${nameafter}= Run and Return Rc and Output ${cmdname}
649 Should Not Be Equal As Strings ${namebefore} ${nameafter} openonu adpater did not reconciled!
650 ${podStatusOutput}= Run kubectl get pods -n ${NAMESPACE}
651 Log ${podStatusOutput}
652 ${countAfterRestart}= Run kubectl get pods -n ${NAMESPACE} | grep Running | wc -l
653 Should Be Equal As Strings ${countAfterRestart} ${countBeforeRestart}
654 # Disable and enable ONU to verify accessibility via openonu-adapter
655 ${of_id}= Get ofID From OLT List ${src['olt']}
656 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
657 ... ${of_id} ${src['uni_id']}
658 ${onu_device_id}= Get Device ID From SN ${src['onu']}
659 Disable Device ${onu_device_id}
660 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
661 ... Validate Device DISABLED UNKNOWN
662 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-admin-lock
663 Wait Until Keyword Succeeds ${timeout} 2s
664 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
665 Sleep 5s
666 Enable Device ${onu_device_id}
667 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
668 ... Validate Device ENABLED ACTIVE
669 ... REACHABLE ${src['onu']} onu=True onu_reason=onu-reenabled
670 Wait Until Keyword Succeeds ${timeout} 2s
671 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
672 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
673 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
674 # Workaround ends here for issue seen in VOL-4489.
675 END
676 Run Keyword If '${SOAK_TEST}'=='False' Delete All Devices and Verify
677
Andy Bavier7613b9a2020-07-08 07:25:47 -0700678Validate parsing of data traffic through voltha using tech profile
679 [Documentation] Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
680 ... Prerequisite tools : Tcpdump and Mausezahn traffic generator on both RG and DHCP/BNG VMs
681 ... Install jq tool to read json file, where test suite is being running
Girish Gowdrabbfbbc32021-05-17 14:36:58 -0700682 ... This test sends TCP packets with pbits between 0 and 7 and validates that
Andy Bavier7613b9a2020-07-08 07:25:47 -0700683 ... the pbits are preserved by the PON.
Hardik Windlass62db9d92021-05-17 09:32:40 +0000684 [Tags] dataplaneDt TechProfileDt VOL-3291 soakDataplane
Andy Bavier7613b9a2020-07-08 07:25:47 -0700685 [Setup] Start Logging TechProfileDt
Hardik Windlass43531332021-05-19 07:07:03 +0000686 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavier7613b9a2020-07-08 07:25:47 -0700687 ... AND Stop Logging TechProfileDt
688 Pass Execution If '${has_dataplane}'=='False'
689 ... Skipping test: Technology profile validation can be done only in physical pod
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800690 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700691 ${src}= Set Variable ${hosts.src[${I}]}
692 ${dst}= Set Variable ${hosts.dst[${I}]}
693
Andy Bavier275414a2020-07-16 13:07:17 -0700694 ${src_iface_name}= Fetch From Left ${src['dp_iface_name']} .
695
Andy Bavier7613b9a2020-07-08 07:25:47 -0700696 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
697 ${bng_user}= Get Variable Value ${dst['noroot_user']}
698 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
699 Pass Execution If "${bng_ip}" == "${NONE}" or "${bng_user}" == "${NONE}" or "${bng_pass}" == "${NONE}"
700 ... Skipping test: credentials for BNG login required in deployment config
701
702 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
703 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
704 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the RG
705 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
706 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
707 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the BNG
708 Log Upstream test
709 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Andy Bavier275414a2020-07-16 13:07:17 -0700710 ... ${dst['dp_iface_ip_qinq']} ${dst['dp_iface_name']} ${src_iface_name}
Girish Gowdra66cd95d2021-07-08 10:31:54 -0700711 ... 0 tcp ${src['c_tag']} ${src['s_tag']} upstream vlan
Andy Bavier7613b9a2020-07-08 07:25:47 -0700712 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
713 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
714 Log Downstream test
715 ${rg_ip} ${stderr} ${rc}= Execute Remote Command
716 ... ifconfig ${src['dp_iface_name']} | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }'
717 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
718 Should Be Equal As Integers ${rc} 0 Could not get RG's IP address
719 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Girish Gowdra66cd95d2021-07-08 10:31:54 -0700720 ... ${rg_ip} ${src_iface_name} ${dst['dp_iface_name']}
721 ... 0 tcp ${src['c_tag']} ${src['s_tag']} downstream tcp
Andy Bavier7613b9a2020-07-08 07:25:47 -0700722 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
723 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
724 END
725
Hardik Windlass16cdf962020-04-29 15:26:50 +0530726Test Disable and Enable OLT PON Port for DT
727 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
728 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
729 ... Perform disable on the OLT PON Port and validate that the pings do not succeed
730 ... Perform enable on the OLT PON Port and validate that the pings are successful
Hardik Windlass43531332021-05-19 07:07:03 +0000731 [Tags] functionalDt DisableEnableOltPonPortDt VOL-2577 soak
Girish Gowdra8fd96962021-12-14 16:20:04 +0530732 [Setup] Run Keywords Start Logging DisableEnableOltPonPortDt
733 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000734 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass16cdf962020-04-29 15:26:50 +0530735 ... AND Stop Logging DisableEnableOltPonPortDt
Hardik Windlass41701e82021-01-12 17:44:44 +0000736 FOR ${I} IN RANGE 0 ${olt_count}
737 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
738 Disable Enable PON Port Per OLT DT ${olt_serial_number}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530739 END
740
Hardik Windlass91cc5292021-07-26 10:09:40 +0000741Data plane Bandwidth profile update verification for DT
742 [Documentation] Test bandwidth profile is updated for one subscriber and not changed for other subscribers.
743 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
744 ... Assumes Default and User_Bandwidth2 profiles are configured as bandwidth profiles
745 [Tags] non-critical dataplaneDt BandwidthProfileUpdateTCPDt VOL-2549
746 [Setup] Start Logging BandwidthProfileUpdateTCPDt
747 [Teardown] Run Keywords Collect Logs
748 ... AND Stop Logging BandwidthProfileUpdateTCPDt
749 ... AND Send File To Onos ${CURDIR}/../../tests/data/${POD_NAME}-sadis-DT.json
750 Pass Execution If '${has_dataplane}'=='False'
751 ... Bandwidth profile validation can be done only in physical pod. Skipping this test in BBSIM.
752 Delete All Devices And Verify
753 Run Keyword If ${has_dataplane} Clean Up Linux
754 Setup
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000755 Perform Sanity Test DT
Hardik Windlass91cc5292021-07-26 10:09:40 +0000756 # Update the Bandwidth Profile for the First Subscriber under test
757 ${src}= Set Variable ${hosts.src[${0}]}
758 ${dst}= Set Variable ${hosts.dst[${0}]}
759 ${of_id}= Get ofID From OLT List ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +0000760 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass91cc5292021-07-26 10:09:40 +0000761 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
762 ... ${of_id} ${src['uni_id']}
Hardik Windlass78bb0fd2022-06-21 15:11:54 +0530763 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass91cc5292021-07-26 10:09:40 +0000764 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
765 ${oldBwName} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id} upstreamBandwidthProfile
766 # Delete the existing subscriber
767 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
768 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
769 # Verify VOLTHA flows for ONU under test is Zero
770 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
771 ... ${onu_device_id} 0
772 # Disable and Re-Enable the ONU (To replicate DT current workflow)
773 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
774 Disable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000775 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass91cc5292021-07-26 10:09:40 +0000776 ... Validate Device DISABLED UNKNOWN
777 ... REACHABLE ${src['onu']}
778 Enable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000779 Wait Until Keyword Succeeds 360s 5s
Hardik Windlass91cc5292021-07-26 10:09:40 +0000780 ... Validate Device ENABLED ACTIVE
781 ... REACHABLE ${src['onu']}
782 # Change the bandwidth profile and load the configuration
783 ${newBwName} Set Variable If ${oldBwName} == 'Default' 'User_Bandwidth2' 'Default'
784 ${cmd} Catenate
785 ... sed 's/upstreamBandwidthProfile": "${oldBwName}"/upstreamBandwidthProfile": "${newBwName}"/g'
786 ... ${CURDIR}/../../tests/data/${POD_NAME}-sadis-DT.json > ${CURDIR}/../../tests/data/${POD_NAME}-sadis-new.json
787 ${rc} Run and Return RC ${cmd}
788 Send File To Onos ${CURDIR}/../../tests/data/${POD_NAME}-sadis-new.json
789 # Re-add the subscriber with new bandwidth profile
790 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
791 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
792 # Verify subscriber access flows are added for the ONU port
793 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
794 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
795 ... ${onu_port} ${nni_port} ${src['s_tag']}
796 # Verify ONU state in voltha
797 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
798 ... ENABLED ACTIVE REACHABLE
799 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
800 # Verify Meters in ONOS
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000801 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass91cc5292021-07-26 10:09:40 +0000802 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlass3f75b602021-12-14 05:55:18 +0000803 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
804 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
805 # Workaround ends here for issue seen in VOL-4489.
Hardik Windlass91cc5292021-07-26 10:09:40 +0000806 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
807 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
808 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
809 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
810 ... ${dst['container_name']}
811 # Verify new bandwidth profile is applied and other subscribers are working fine
812 ${checkBwName} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id} upstreamBandwidthProfile
813 Should Be Equal ${checkBwName} ${newBwName} The bandwidth profile is not updated properly
814 FOR ${I} IN RANGE 0 ${num_all_onus}
815 ${src}= Set Variable ${hosts.src[${I}]}
816 ${dst}= Set Variable ${hosts.dst[${I}]}
817 ${of_id}= Get ofID From OLT List ${src['olt']}
818 # Check for iperf3 and jq tools
819 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
820 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
821 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
822
823 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000824 ... ${of_id} ${src['uni_id']}
Hardik Windlass91cc5292021-07-26 10:09:40 +0000825 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
826 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
827 ... upstreamBandwidthProfile
828 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
829 ... ${bandwidth_profile_name}
830 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
831 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
832 ... downstreamBandwidthProfile
833 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
834 ... ${bandwidth_profile_name}
835 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
836
837 # Stream TCP packets from RG to server
838 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
839 ... args=-t 30
840 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
841
842 # Stream TCP packets from server to RG
843 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
844 ... args=-R -t 30
845 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
846
847 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
848 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
849 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
850 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
851
852 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
853 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
854 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
855 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
856 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
857 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
858 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
859 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
860 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
861 END
862
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000863
864Test ONU Delete and Auto-Discovery for DT
865 [Documentation] Tests the voltctl delete and Auto-Discovery of the ONU
Andrea Campanella92e21b02022-01-04 15:32:04 +0100866 [Tags] functionalDt VOL-3098 ONUAutoDiscoveryDt
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000867 [Setup] Start Logging ONUAutoDiscoveryDt
868 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
869 ... AND Stop Logging ONUAutoDiscoveryDt
870 Clear All Devices Then Create New Device
871 # Performing Sanity Test to make sure subscribers are all AUTH+DHCP and pingable
872 Run Keyword If ${has_dataplane} Clean Up Linux
873 Perform Sanity Test DT
874 FOR ${I} IN RANGE 0 ${num_all_onus}
875 ${src}= Set Variable ${hosts.src[${I}]}
876 ${dst}= Set Variable ${hosts.dst[${I}]}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000877 ${of_id}= Get ofID From OLT List ${src['olt']}
Andrea Campanella92e21b02022-01-04 15:32:04 +0100878 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
879 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
Hardik Windlass78bb0fd2022-06-21 15:11:54 +0530880 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000881 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass7a9e1f22022-03-09 05:33:34 +0000882 # Remove Subscriber
883 Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
884 ... volt-remove-subscriber-access ${of_id} ${onu_port}
885 # Additional sleep to let subscriber delete process
886 Sleep 10s
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000887 # Delete ONU and Verify Ping Fails
888 Delete Device ${onu_device_id}
889 Run Keyword If ${has_dataplane} Verify ping is successful except for given device
890 ... ${num_all_onus} ${src['onu']}
891 # Verify that no pending flows exist for the ONU port
892 Wait Until Keyword Succeeds ${timeout} 2s
893 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
894 # ONU Auto-Discovery
895 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000896 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000897 # Check ONU port is Enabled in ONOS
898 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000899 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000900 ${onu_device_id}= Get Device ID From SN ${src['onu']}
901 Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
Hardik Windlass7a9e1f22022-03-09 05:33:34 +0000902 # Re-Add Subscriber
903 Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
904 ... volt-add-subscriber-access ${of_id} ${onu_port}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000905 # Verify ONU state in voltha
906 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
907 ... Validate Device ENABLED ACTIVE REACHABLE
908 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
909 # Verify that no pending flows exist for the ONU port
910 Wait Until Keyword Succeeds ${timeout} 2s
911 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
912 # Verify subscriber access flows are added for the ONU port
913 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
914 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
915 ... ${onu_port} ${nni_port} ${src['s_tag']}
916 # Verify Meters in ONOS
917 Wait Until Keyword Succeeds ${timeout} 5s
918 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
919 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
920 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
921 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
922 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
923 ... ${dst['container_name']}
924 END
925 # Verify flows for all OLTs
926 Wait Until Keyword Succeeds ${timeout} 5s Validate All OLT Flows
927
928
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000929*** Keywords ***
930Setup Suite
931 [Documentation] Set up the test suite
932 Common Test Suite Setup
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -0700933 #Restore all ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800934 #Run Keyword If ${has_dataplane} RestoreONUs ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -0700935 #power_switch.robot needs it to support different vendor's power switch
936 ${switch_type}= Get Variable Value ${web_power_switch.type}
937 Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000938
939Clear All Devices Then Create New Device
940 [Documentation] Remove any devices from VOLTHA and ONOS
941 # Remove all devices from voltha and nos
942 Delete All Devices and Verify
943 # Execute normal test Setup Keyword
944 Setup
Girish Gowdrad2c0e9d2021-11-23 14:40:23 -0800945
Joey Armstrongb2151282023-01-12 09:38:28 -0500946Validate Performance Intervals
947 [Documentation] Validates all intervals (one per second) of iPerf3 result
948 [Arguments] ${bidirdict}
949 ${actual_intervals}= Get From Dictionary ${bidirdict} intervals
950 ${number_intervals}= Get Length ${actual_intervals}
951 ${result_interval}= Set Variable True
952 FOR ${INDEX} IN RANGE 0 ${number_intervals}
953 ${interval}= Get From List ${actual_intervals} ${INDEX}
954 ${streams}= Get From Dictionary ${interval} streams
955 ${interval_upstream}= Get From List ${streams} 0
956 ${interval_dnstream}= Get From List ${streams} 1
957 ${interval_upstream_bw_used}= Evaluate ${interval_upstream['bits_per_second']}/1000
958 ${interval_dnstream_bw_used}= Evaluate ${interval_dnstream['bits_per_second']}/1000
959 Run Keyword If ${interval_upstream_bw_used} < 5000
960 ... LOG The upstream bandwidth in interval ${INDEX} was too less (${interval_upstream_bw_used} of resv)
961 Run Keyword If ${interval_dnstream_bw_used} < 5000
962 ... LOG: The upstream bandwidth in interval ${INDEX} was too less (${interval_upstream_bw_used} of resv)
963 ${result_interval}= Set Variable If (${interval_upstream_bw_used} < 5000 or ${interval_upstream_bw_used} < 5000)
964 ... False ${result_interval}
965 END
966 [Return] ${result_interval}