blob: b8db9937fc1b628e628651a4524f53726532e4cd [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
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
57
Andy Baviere19991a2020-05-08 10:42:40 -070058# For dataplane bandwidth testing
59${upper_margin_pct} 105 # Allow 5% over the limit
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080060${lower_margin_pct} 90 # Allow 8% under the limit
Andy Baviere19991a2020-05-08 10:42:40 -070061${udp_rate_multiplier} 1.10 # Send UDP at bw profile limit * rate_multiplier
Andy Bavierc80a2742020-08-28 10:59:05 -070062${udp_packet_bytes} 1470 # UDP payload in bytes
Andy Baviere19991a2020-05-08 10:42:40 -070063
Hardik Windlassa3d04b92020-02-17 15:06:05 +000064# Per-test logging on failure is turned off by default; set this variable to enable
65${container_log_dir} ${None}
66
Hardik Windlass43531332021-05-19 07:07:03 +000067# logging flag to enable Collect Logs, can be passed via the command line too
68# example: -v logging:False
69${logging} True
70
Hardik Windlass4ed54502021-05-14 07:34:15 +000071# Flag specific to Soak Jobs
72${SOAK_TEST} False
73${bbsim_port} 50060
74
Hardik Windlassa3d04b92020-02-17 15:06:05 +000075*** Test Cases ***
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070076Reboot DT ONUs Physically
77 [Documentation] This test reboots ONUs physically before execution all the tests
78 ... Test case runs only on the PODs that are configured with PowerSwitch that
79 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
Suchitra Vemuri228f8802021-03-10 13:14:17 -080080 [Tags] functionalDt PowerSwitch RebootAllDTONUs soak
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070081 [Setup] Start Logging RebootAllDTONUs
Hardik Windlass43531332021-05-19 07:07:03 +000082 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070083 ... AND Stop Logging RebootAllDTONUs
84 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -080085 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070086 ${src}= Set Variable ${hosts.src[${I}]}
87 ${dst}= Set Variable ${hosts.dst[${I}]}
Girish Gowdraa3a05c62022-02-16 13:54:37 -080088 # If the power switch port is not specified, continue
89 Continue For Loop If '${src["power_switch_port"]}' == '${None}'
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070090 Disable Switch Outlet ${src['power_switch_port']}
Hardik Windlass5e214b22021-02-26 10:37:14 +000091 Sleep 10s
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070092 Enable Switch Outlet ${src['power_switch_port']}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -070093 END
94
Hardik Windlass4ed54502021-05-14 07:34:15 +000095Create Soak BBSim Device
96 [Documentation] This creates and enables the BBSim device as required by the soak testing
97 ... The BBSim OLT and ONUs created as part of this test are not part of active testing
98 ... but only to mock the load on Soak POD.
99 [Tags] soak
100 [Setup] Start Logging soakPodCreateBBSimLoad
Hardik Windlass43531332021-05-19 07:07:03 +0000101 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass4ed54502021-05-14 07:34:15 +0000102 ... AND Stop Logging soakPodCreateBBSimLoad
103 ${num_bbsim} Get Length ${bbsim}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000104 @{bbsim_olt_of_id_list}= Create List
Hardik Windlass4ed54502021-05-14 07:34:15 +0000105 FOR ${I} IN RANGE 0 ${num_bbsim}
106 ${ip} Evaluate ${bbsim}[${I}].get("ip")
107 ${serial_number} Evaluate ${bbsim}[${I}].get("serial")
108 ${bbsim_olt_device_id}= Create Device ${ip} ${bbsim_port}
109 Log ${bbsim_olt_device_id}
110 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass8b446492021-06-10 06:25:23 +0000111 ... Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN ${bbsim_olt_device_id} by_dev_id=True
Hardik Windlass4ed54502021-05-14 07:34:15 +0000112 Enable Device ${bbsim_olt_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000113 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass4ed54502021-05-14 07:34:15 +0000114 ... Validate OLT Device ENABLED ACTIVE REACHABLE ${serial_number}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000115 ${bbsim_olt_of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
Hardik Windlass4ed54502021-05-14 07:34:15 +0000116 ... ${serial_number}
Hardik Windlassea4caf72021-07-30 07:22:12 +0000117 Log ${bbsim_olt_of_id}
118 Append To List ${bbsim_olt_of_id_list} ${bbsim_olt_of_id}
Hardik Windlass4ed54502021-05-14 07:34:15 +0000119 END
120 # Extra sleep time for ONUs to come up Active
Hardik Windlassea4caf72021-07-30 07:22:12 +0000121 Sleep 60s
122 FOR ${bbsim_olt_of_id} IN @{bbsim_olt_of_id_list}
123 Provision all subscribers on device ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${ONOS_SSH_IP} ${ONOS_REST_PORT}
124 ... ${bbsim_olt_of_id}
125 ${total_onus_per_bbsim_olt}= Count Enabled UNI Ports ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
126 ... ${bbsim_olt_of_id}
127 Wait for all flows to in ADDED state ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
128 ... ${bbsim_olt_of_id} dt ${total_onus_per_bbsim_olt} 1 true
129 ... false false false true
130 END
Hardik Windlass4ed54502021-05-14 07:34:15 +0000131
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000132Sanity E2E Test for OLT/ONU on POD for DT
133 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
134 ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
135 ... Traffic sent with same vlan from different RGs,
136 ... should reach the NNI port on the OLT with the expected double tagged vlan ids
137 ... Inner vlans from the RG should not change
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800138 [Tags] sanityDt soak
Hardik Windlass4ed54502021-05-14 07:34:15 +0000139 [Setup] Start Logging SanityTestDt
Hardik Windlass43531332021-05-19 07:07:03 +0000140 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000141 ... AND Stop Logging SanityTestDt
Hardik Windlass4ed54502021-05-14 07:34:15 +0000142 Setup ${SOAK_TEST}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000143 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000144 Perform Sanity Test DT
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000145
Hardik Windlass35706ba2020-02-20 08:16:42 +0000146Test Subscriber Delete and Add for DT
147 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
Hardik Windlass63d5e002020-03-06 21:07:09 +0530148 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
Hardik Windlass35706ba2020-02-20 08:16:42 +0000149 ... Delete a subscriber and validate that the pings do not succeed and state is purged
150 ... Disable and Enable the ONU (This is to replicate the existing DT behaviour)
151 ... Re-add the subscriber, and validate that the flows are present and pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800152 [Tags] functionalDt SubAddDeleteDt soak
Girish Gowdrafbdddc12021-12-17 15:39:55 +0530153 [Setup] Run Keywords Start Logging SubAddDeleteDt
154 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000155 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass35706ba2020-02-20 08:16:42 +0000156 ... AND Stop Logging SubAddDeleteDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800157 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000158 ${src}= Set Variable ${hosts.src[${I}]}
159 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800160 ${of_id}= Get ofID From OLT List ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +0000161 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000162 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800163 ${olt_device_id}= Get OLTDeviceID From OLT List ${src['olt']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100164 ${num_of_olt_onus}= Get Num of Onus From OLT SN ${src['olt']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000165 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000166 ... ${of_id} ${src['uni_id']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000167 # Remove Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000168 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000169 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000170 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000171 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000172 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
173 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Andrea Campanellad848de02020-11-24 10:23:41 +0100174
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530175 # 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 +0100176 ${onos_flows_count}= Evaluate 4 * ( ${num_of_olt_onus} - 1 )
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530177 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
178 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Suchitra Vemuri93db32b2020-11-23 21:27:05 -0800179 ... ${of_id} ${onos_flows_count}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000180 # 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 +0100181 ${olt_flows}= Evaluate 2 * ( ${num_of_olt_onus} - 1 ) + 1
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000182 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows
183 ... ${olt_flows} ${olt_device_id}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000184 # Verify VOLTHA flows for ONU under test is Zero
185 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
186 ... ${onu_device_id} 0
187 # Disable and Re-Enable the ONU (To replicate DT current workflow)
188 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
189 Disable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000190 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000191 ... Validate Device DISABLED UNKNOWN
192 ... REACHABLE ${src['onu']}
193 Enable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000194 Wait Until Keyword Succeeds 360s 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000195 ... Validate Device ENABLED ACTIVE
196 ... REACHABLE ${src['onu']}
197 # Add Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000198 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000199 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530200 # Verify subscriber access flows are added for the ONU port
201 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass25e11702020-03-30 20:05:19 +0530202 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
203 ... ${onu_port} ${nni_port} ${src['s_tag']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000204 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000205 ... Validate Device ENABLED ACTIVE
206 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
Girish Gowdrad2c0e9d2021-11-23 14:40:23 -0800207 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
208 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
209 # Workaround ends here for issue seen in VOL-4489.
Hardik Windlass35706ba2020-02-20 08:16:42 +0000210 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000211 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass35706ba2020-02-20 08:16:42 +0000212 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
213 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlass35706ba2020-02-20 08:16:42 +0000214 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800215 # Verify flows for all OLTs
216 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate All OLT Flows
Hardik Windlass35706ba2020-02-20 08:16:42 +0000217
Hardik Windlass63d5e002020-03-06 21:07:09 +0530218Test Disable and Enable ONU for DT
219 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
220 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
221 ... Perform disable on the ONUs and validate that the pings do not succeed
222 ... Perform enable on the ONUs and validate that the pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800223 [Tags] functionalDt DisableEnableONUDt soak
Girish Gowdra8fd96962021-12-14 16:20:04 +0530224 [Setup] Run Keywords Start Logging DisableEnableONUDt
225 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000226 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass63d5e002020-03-06 21:07:09 +0530227 ... AND Stop Logging DisableEnableONUDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800228 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530229 ${src}= Set Variable ${hosts.src[${I}]}
230 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800231 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530232 ${onu_device_id}= Get Device ID From SN ${src['onu']}
233 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000234 ... ${of_id} ${src['uni_id']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530235 Disable Device ${onu_device_id}
236 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
237 ... Validate Device DISABLED UNKNOWN
Hardik Windlass42c84232022-01-27 04:58:27 +0000238 ... REACHABLE ${src['onu']} onu=True onu_reason=tech-profile-config-delete-success
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000239 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000240 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassfb5eace2020-03-26 14:49:01 +0530241 # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
Hardik Windlass63d5e002020-03-06 21:07:09 +0530242 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000243 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530244 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
245 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
246 Sleep 5s
247 Enable Device ${onu_device_id}
Suchitra Vemuricdc32d82020-07-17 12:24:46 -0700248 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530249 ... Validate Device ENABLED ACTIVE
250 ... REACHABLE ${src['onu']} onu=True onu_reason=onu-reenabled
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000251 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000252 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Girish Gowdrac38824c2021-12-01 13:22:08 +0530253 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
254 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
255 # Workaround ends here for issue seen in VOL-4489.
Hardik Windlass63d5e002020-03-06 21:07:09 +0530256 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000257 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass63d5e002020-03-06 21:07:09 +0530258 ... Check Ping True ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
259 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Hardik Windlass63d5e002020-03-06 21:07:09 +0530260 END
261
Hardik Windlassaaea3402020-03-10 19:45:45 +0530262Test Disable and Delete OLT for DT
263 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
264 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
265 ... Perform disable on the OLT and validate ONUs state and that the pings do not succeed
266 ... Perform delete on the OLT, Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Hardik Windlass43531332021-05-19 07:07:03 +0000267 [Tags] functionalDt DisableDeleteOLTDt soak
Suchitra Vemuri221398a2020-05-29 22:45:17 -0700268 [Setup] Start Logging DisableDeleteOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000269 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlassaaea3402020-03-10 19:45:45 +0530270 ... AND Stop Logging DisableDeleteOLTDt
Hardik Windlassaaea3402020-03-10 19:45:45 +0530271 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800272 FOR ${I} IN RANGE 0 ${olt_count}
273 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
274 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
275 Disable Device ${olt_device_id}
276 ${of_id}= Get ofID From OLT List ${olt_serial_number}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000277 Wait Until Keyword Succeeds ${timeout} 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800278 ... Validate OLT Device DISABLED UNKNOWN REACHABLE
279 ... ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800280 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
281 # Validate ONUs
282 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONUs After OLT Disable
Andrea Campanella4e507882020-11-26 11:33:11 +0100283 ... ${num_onus} ${olt_serial_number}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800284 # Verify ONOS Flows
Matteo Scandolo8b6dc262021-11-22 12:30:27 -0800285 # When we disable the device we shouldn't have any flows provisioned on it
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800286 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
287 ... Verify Subscriber Access Flows Added Count DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
Matteo Scandolo8b6dc262021-11-22 12:30:27 -0800288 ... ${of_id} 0
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800289 # Verify VOLTHA Flows
Hardik Windlass3a294892021-11-23 17:05:29 +0000290 # OLT should only have 1 default flow for LLDP
291 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows 1
Matteo Scandolo8b6dc262021-11-22 12:30:27 -0800292 ... ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800293 ${List_ONU_Serial} Create List
294 Set Suite Variable ${List_ONU_Serial}
Andrea Campanella99a548b2020-11-18 09:50:32 +0100295 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800296 Log ${List_ONU_Serial}
297 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
Matteo Scandolo8b6dc262021-11-22 12:30:27 -0800298 ... ${List_ONU_Serial} 0
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800299 # Delete OLT and Validate Empty Device List
300 Delete Device ${olt_device_id}
Andrea Campanella4e507882020-11-26 11:33:11 +0100301 # Check that the OLT and the ONUs are actually removed from the system
302 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed
303 ... ${olt_serial_number}
304 Run Keyword and Continue On Failure Validate all ONUS for OLT Removed ${num_all_onus} ${hosts}
305 ... ${olt_serial_number} ${timeout}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000306 Wait Until Keyword Succeeds ${timeout} 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800307 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800308 END
Hardik Windlassaaea3402020-03-10 19:45:45 +0530309 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
Hardik Windlass43531332021-05-19 07:07:03 +0000310 Run Keyword Setup ${SOAK_TEST}
Suchitra Vemuriae9cecb2020-03-12 12:59:14 -0700311 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000312 Perform Sanity Test DT
Hardik Windlassaaea3402020-03-10 19:45:45 +0530313
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530314Test Disable and Enable OLT for DT
315 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
316 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
317 ... Perform disable on the OLT and validate that the pings do not succeed
318 ... Perform enable on the OLT and validate that the pings are successful
Suchitra Vemuri228f8802021-03-10 13:14:17 -0800319 [Tags] functionalDt DisableEnableOLTDt soak
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530320 [Setup] Start Logging DisableEnableOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000321 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530322 ... AND Stop Logging DisableEnableOLTDt
323 # Disable and Validate OLT Device
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800324 FOR ${I} IN RANGE 0 ${olt_count}
325 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
326 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
327 ${rc} ${output}= Run and Return Rc and Output
328 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
329 Should Be Equal As Integers ${rc} 0
330 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
331 ... ${olt_serial_number}
332 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800333 # Validate ONUs
334 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530335 ${src}= Set Variable ${hosts.src[${I}]}
336 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800337 ${of_id}= Get ofID From OLT List ${src['olt']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530338 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000339 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000340 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000341 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000342 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530343 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000344 ... Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass7c801e62020-05-04 19:33:21 +0530345 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
346 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
347 # Remove Subscriber Access (To replicate DT workflow)
TorstenThieme4e2168e2021-06-22 14:01:47 +0000348 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Hardik Windlass7c801e62020-05-04 19:33:21 +0530349 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
350 # Delete ONU Device (To replicate DT workflow)
351 Delete Device ${onu_device_id}
352 END
Hardik Windlass2b37e712020-06-12 02:13:17 +0530353 Sleep 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530354 # Enable the OLT back and check ONU, OLT status are back to "ACTIVE"
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800355 FOR ${I} IN RANGE 0 ${olt_count}
356 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
357 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
358 Enable Device ${olt_device_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800359 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
360 ... ${olt_serial_number}
361 #TODO: Update for PON_OLT ETHERNET_NNI
362 #Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Port Types
363 #... PON_OLT ETHERNET_NNI
364 END
Hardik Windlass7c801e62020-05-04 19:33:21 +0530365 # Waiting extra time for the ONUs to come up
366 Sleep 60s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800367 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000368 Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530369
370Test Delete and ReAdd OLT for DT
371 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
372 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
373 ... Disable and Delete the OLT
374 ... Create/Enable the same OLT again
375 ... Validate DHCP/E2E pings succeed for all the ONUs connected to the OLT
Hardik Windlass43531332021-05-19 07:07:03 +0000376 [Tags] functionalDt DeleteReAddOLTDt soak
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530377 [Setup] Start Logging DeleteReAddOLTDt
Hardik Windlass43531332021-05-19 07:07:03 +0000378 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530379 ... AND Stop Logging DeleteReAddOLTDt
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800380 FOR ${I} IN RANGE 0 ${olt_count}
381 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
382 ${of_id}= Get ofID From OLT List ${olt_serial_number}
383 Delete Device and Verify ${olt_serial_number}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000384 Wait Until Keyword Succeeds ${timeout} 5s
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800385 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800386 END
387 # Recreate the OLTs
Hardik Windlass43531332021-05-19 07:07:03 +0000388 Setup ${SOAK_TEST}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800389 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000390 Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530391
392Test Disable ONUs and OLT Then Delete ONUs and OLT for DT
393 [Documentation] On deployed POD, disable the ONU, disable the OLT and then delete ONU and OLT.
394 ... This TC is to confirm that ONU removal is not impacting OLT
395 ... Devices will be removed during the execution of this TC
396 ... so calling setup at the end to add the devices back to avoid the confusion.
397 [Tags] functionalDt DisableDeleteONUOLTDt
Girish Gowdra8fd96962021-12-14 16:20:04 +0530398 [Setup] Run Keywords Start Logging DisableDeleteONUOLTDt
399 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000400 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530401 ... AND Stop Logging DisableDeleteONUOLTDt
Suchitra Vemuri02170552021-03-23 16:40:50 -0700402 @{onu_reason}= Create List initial-mib-downloaded omci-flows-pushed
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800403 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530404 ${src}= Set Variable ${hosts.src[${I}]}
405 ${dst}= Set Variable ${hosts.dst[${I}]}
406 ${onu_device_id}= Get Device ID From SN ${src['onu']}
407 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
408 ... Validate Device ENABLED ACTIVE
Suchitra Vemuri02170552021-03-23 16:40:50 -0700409 ... REACHABLE ${src['onu']} onu=True onu_reason=${onu_reason}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000410 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530411 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800412 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530413 Disable Device ${onu_device_id}
414 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
415 ... Validate Device DISABLED UNKNOWN
416 ... REACHABLE ${src['onu']} onu=false
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000417 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530418 ... Validate OLT Device ENABLED ACTIVE
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800419 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530420 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800421 # Disable all OLTs
422 FOR ${I} IN RANGE 0 ${olt_count}
423 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
424 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
425 ${rc} ${output}= Run and Return Rc and Output
426 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
427 Should Be Equal As Integers ${rc} 0
428 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
429 ... ${olt_serial_number}
430 END
431 # Validate ONUs after OLT disable
432 FOR ${I} IN RANGE 0 ${num_all_onus}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530433 ${src}= Set Variable ${hosts.src[${I}]}
434 ${dst}= Set Variable ${hosts.dst[${I}]}
435 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000436 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530437 ... Validate Device DISABLED DISCOVERED
438 ... UNREACHABLE ${src['onu']} onu=false
439 Delete Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000440 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530441 ... Validate OLT Device DISABLED UNKNOWN
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800442 ... REACHABLE ${src['olt']}
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530443 END
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800444 # Delete all OLTs
445 Delete All Devices and Verify
446
447 #Delete Device ${olt_device_id}
448 #TODO: Fix the following assertion
449 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Test Empty Device List
450 #Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
451 #... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
452
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530453 # Re-do Setup (Recreate the OLT) and Perform Sanity Test DT
454 Run Keyword Setup
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800455 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000456 Perform Sanity Test DT
Hardik Windlass3b531fa2020-04-23 18:51:44 +0530457
Andy Baviere19991a2020-05-08 10:42:40 -0700458Data plane verification using TCP for DT
459 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
460 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Matteo Scandoloab48f9e2021-06-11 17:08:00 +0200461 [Tags] non-critical dataplaneDt BandwidthProfileTCPDt VOL-3061 soakDataplane
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700462 [Setup] Start Logging BandwidthProfileTCPDt
Hardik Windlass43531332021-05-19 07:07:03 +0000463 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700464 ... AND Stop Logging BandwidthProfileTCPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700465 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
466 ... physical pod. Skipping this test in BBSIM.
Hardik Windlass3280f2d2021-05-20 07:38:31 +0000467 Run Keyword If '${SOAK_TEST}'=='False' Clear All Devices Then Create New Device
Hardik Windlass62db9d92021-05-17 09:32:40 +0000468 ... ELSE Setup Soak
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800469 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000470 Perform Sanity Test DT
Suchitra Vemuria4e3e072020-11-06 14:23:47 -0800471
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800472 #${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
473 #... ${olt_serial_number}
474 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700475 ${src}= Set Variable ${hosts.src[${I}]}
476 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800477 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavierf6ab19c2020-05-14 10:34:47 -0700478 # Check for iperf3 and jq tools
479 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
480 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
481 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
482
Andy Baviere19991a2020-05-08 10:42:40 -0700483 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000484 ... ${of_id} ${src['uni_id']}
Andy Baviere19991a2020-05-08 10:42:40 -0700485 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
486 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
487 ... upstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700488 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
489 ... ${bandwidth_profile_name}
490 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700491 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
492 ... downstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700493 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
494 ... ${bandwidth_profile_name}
495 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700496
497 # Stream TCP packets from RG to server
498 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
499 ... args=-t 30
500 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
501
502 # Stream TCP packets from server to RG
503 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
504 ... args=-R -t 30
505 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
506
507 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
508 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
509 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
510 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
511
512 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
513 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700514 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
515 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
516 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700517 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
518 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
519 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
520 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
521 END
522
523Data plane verification using UDP for DT
524 [Documentation] Test bandwidth profile is met and not exceeded for each subscriber.
525 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
Matteo Scandoloab48f9e2021-06-11 17:08:00 +0200526 [Tags] non-critical dataplaneDt BandwidthProfileUDPDt VOL-3061 soakDataplane
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700527 [Setup] Start Logging BandwidthProfileUDPDt
Hardik Windlass43531332021-05-19 07:07:03 +0000528 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavierdfbcaef2020-05-27 15:34:18 -0700529 ... AND Stop Logging BandwidthProfileUDPDt
Andy Baviere19991a2020-05-08 10:42:40 -0700530 Pass Execution If '${has_dataplane}'=='False' Bandwidth profile validation can be done only in
531 ... physical pod. Skipping this test in BBSIM.
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800532 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Baviere19991a2020-05-08 10:42:40 -0700533 ${src}= Set Variable ${hosts.src[${I}]}
534 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800535 ${of_id}= Get ofID From OLT List ${src['olt']}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700536
537 # Check for iperf3 and jq tools
538 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
539 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
540 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
541
Andy Baviere19991a2020-05-08 10:42:40 -0700542 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000543 ... ${of_id} ${src['uni_id']}
Andy Baviere19991a2020-05-08 10:42:40 -0700544 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
545 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
546 ... upstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700547 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
548 ... ${bandwidth_profile_name}
549 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700550 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
551 ... downstreamBandwidthProfile
Girish Gowdra21ec25d2021-05-24 10:07:01 -0700552 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
553 ... ${bandwidth_profile_name}
554 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
Andy Baviere19991a2020-05-08 10:42:40 -0700555
556 # Stream UDP packets from RG to server
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200557 ${uprate}= Run Keyword If ${limiting_bw_value_upstream} != 1000000
558 ... Evaluate ${limiting_bw_value_upstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200559 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200560 ... Set Variable ${limiting_bw_value_upstream}
Andrea Campanella580e0492020-08-05 15:35:48 +0200561
Andy Baviere19991a2020-05-08 10:42:40 -0700562 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700563 ... args=-u -b ${uprate}K -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700564 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
565 ${actual_upstream_bw_used}= Evaluate
566 ... (100 - ${updict['end']['sum']['lost_percent']})*${updict['end']['sum']['bits_per_second']}/100000
567
568 # Stream UDP packets from server to RG
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200569 ${dnrate}= Run Keyword If ${limiting_bw_value_dnstream} != 1000000
570 ... Evaluate ${limiting_bw_value_dnstream}*${udp_rate_multiplier}
Andrea Campanella580e0492020-08-05 15:35:48 +0200571 ... ELSE
Andrea Campanella1d34bfc2020-08-06 09:58:49 +0200572 ... Set Variable ${limiting_bw_value_dnstream}
Andy Baviere19991a2020-05-08 10:42:40 -0700573 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
Andy Bavier7dc50622020-05-28 14:34:12 -0700574 ... args=-u -b ${dnrate}K -R -t 30 -l ${udp_packet_bytes} --pacing-timer 0
Andy Baviere19991a2020-05-08 10:42:40 -0700575 # With UDP test, bits per second is the sending rate. Multiply by the loss rate to get the throughput.
576 ${actual_dnstream_bw_used}= Evaluate
577 ... (100 - ${dndict['end']['sum']['lost_percent']})*${dndict['end']['sum']['bits_per_second']}/100000
578
579 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
580 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
581 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
582 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
583
584 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
585 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
Andy Bavier7613b9a2020-07-08 07:25:47 -0700586 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
587 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
588 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
Andy Baviere19991a2020-05-08 10:42:40 -0700589 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
590 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
591 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
592 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
593 END
594
Andy Bavier7613b9a2020-07-08 07:25:47 -0700595Validate parsing of data traffic through voltha using tech profile
596 [Documentation] Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
597 ... Prerequisite tools : Tcpdump and Mausezahn traffic generator on both RG and DHCP/BNG VMs
598 ... Install jq tool to read json file, where test suite is being running
Girish Gowdrabbfbbc32021-05-17 14:36:58 -0700599 ... This test sends TCP packets with pbits between 0 and 7 and validates that
Andy Bavier7613b9a2020-07-08 07:25:47 -0700600 ... the pbits are preserved by the PON.
Hardik Windlass62db9d92021-05-17 09:32:40 +0000601 [Tags] dataplaneDt TechProfileDt VOL-3291 soakDataplane
Andy Bavier7613b9a2020-07-08 07:25:47 -0700602 [Setup] Start Logging TechProfileDt
Hardik Windlass43531332021-05-19 07:07:03 +0000603 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Andy Bavier7613b9a2020-07-08 07:25:47 -0700604 ... AND Stop Logging TechProfileDt
605 Pass Execution If '${has_dataplane}'=='False'
606 ... Skipping test: Technology profile validation can be done only in physical pod
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800607 FOR ${I} IN RANGE 0 ${num_all_onus}
Andy Bavier7613b9a2020-07-08 07:25:47 -0700608 ${src}= Set Variable ${hosts.src[${I}]}
609 ${dst}= Set Variable ${hosts.dst[${I}]}
610
Andy Bavier275414a2020-07-16 13:07:17 -0700611 ${src_iface_name}= Fetch From Left ${src['dp_iface_name']} .
612
Andy Bavier7613b9a2020-07-08 07:25:47 -0700613 ${bng_ip}= Get Variable Value ${dst['noroot_ip']}
614 ${bng_user}= Get Variable Value ${dst['noroot_user']}
615 ${bng_pass}= Get Variable Value ${dst['noroot_pass']}
616 Pass Execution If "${bng_ip}" == "${NONE}" or "${bng_user}" == "${NONE}" or "${bng_pass}" == "${NONE}"
617 ... Skipping test: credentials for BNG login required in deployment config
618
619 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
620 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
621 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the RG
622 ${stdout} ${stderr} ${rc}= Execute Remote Command which mausezahn tcpdump
623 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
624 Pass Execution If ${rc} != 0 Skipping test: mausezahn / tcpdump not found on the BNG
625 Log Upstream test
626 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Andy Bavier275414a2020-07-16 13:07:17 -0700627 ... ${dst['dp_iface_ip_qinq']} ${dst['dp_iface_name']} ${src_iface_name}
Girish Gowdra66cd95d2021-07-08 10:31:54 -0700628 ... 0 tcp ${src['c_tag']} ${src['s_tag']} upstream vlan
Andy Bavier7613b9a2020-07-08 07:25:47 -0700629 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
630 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
631 Log Downstream test
632 ${rg_ip} ${stderr} ${rc}= Execute Remote Command
633 ... ifconfig ${src['dp_iface_name']} | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1 }'
634 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
635 Should Be Equal As Integers ${rc} 0 Could not get RG's IP address
636 Run Keyword If ${has_dataplane} Create traffic with each pbit and capture at other end
Girish Gowdra66cd95d2021-07-08 10:31:54 -0700637 ... ${rg_ip} ${src_iface_name} ${dst['dp_iface_name']}
638 ... 0 tcp ${src['c_tag']} ${src['s_tag']} downstream tcp
Andy Bavier7613b9a2020-07-08 07:25:47 -0700639 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
640 ... ${bng_ip} ${bng_user} ${bng_pass} ${dst['container_type']} ${dst['container_name']}
641 END
642
Hardik Windlass16cdf962020-04-29 15:26:50 +0530643Test Disable and Enable OLT PON Port for DT
644 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
645 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityDt test was executed)
646 ... Perform disable on the OLT PON Port and validate that the pings do not succeed
647 ... Perform enable on the OLT PON Port and validate that the pings are successful
Hardik Windlass43531332021-05-19 07:07:03 +0000648 [Tags] functionalDt DisableEnableOltPonPortDt VOL-2577 soak
Girish Gowdra8fd96962021-12-14 16:20:04 +0530649 [Setup] Run Keywords Start Logging DisableEnableOltPonPortDt
650 ... AND Run Keyword If ${has_dataplane} Set Non-Critical Tag for XGSPON Tech
Hardik Windlass43531332021-05-19 07:07:03 +0000651 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
Hardik Windlass16cdf962020-04-29 15:26:50 +0530652 ... AND Stop Logging DisableEnableOltPonPortDt
Hardik Windlass41701e82021-01-12 17:44:44 +0000653 FOR ${I} IN RANGE 0 ${olt_count}
654 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
655 Disable Enable PON Port Per OLT DT ${olt_serial_number}
Hardik Windlass16cdf962020-04-29 15:26:50 +0530656 END
657
Hardik Windlass91cc5292021-07-26 10:09:40 +0000658Data plane Bandwidth profile update verification for DT
659 [Documentation] Test bandwidth profile is updated for one subscriber and not changed for other subscribers.
660 ... Assumes iperf3 and jq installed on client and iperf -s running on DHCP server
661 ... Assumes Default and User_Bandwidth2 profiles are configured as bandwidth profiles
662 [Tags] non-critical dataplaneDt BandwidthProfileUpdateTCPDt VOL-2549
663 [Setup] Start Logging BandwidthProfileUpdateTCPDt
664 [Teardown] Run Keywords Collect Logs
665 ... AND Stop Logging BandwidthProfileUpdateTCPDt
666 ... AND Send File To Onos ${CURDIR}/../../tests/data/${POD_NAME}-sadis-DT.json
667 Pass Execution If '${has_dataplane}'=='False'
668 ... Bandwidth profile validation can be done only in physical pod. Skipping this test in BBSIM.
669 Delete All Devices And Verify
670 Run Keyword If ${has_dataplane} Clean Up Linux
671 Setup
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000672 Perform Sanity Test DT
Hardik Windlass91cc5292021-07-26 10:09:40 +0000673 # Update the Bandwidth Profile for the First Subscriber under test
674 ${src}= Set Variable ${hosts.src[${0}]}
675 ${dst}= Set Variable ${hosts.dst[${0}]}
676 ${of_id}= Get ofID From OLT List ${src['olt']}
TorstenThiemedda37652021-11-11 16:22:05 +0000677 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
Hardik Windlass91cc5292021-07-26 10:09:40 +0000678 ${onu_device_id}= Get Device ID From SN ${src['onu']}
679 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
680 ... ${of_id} ${src['uni_id']}
681 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
682 ${oldBwName} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id} upstreamBandwidthProfile
683 # Delete the existing subscriber
684 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
685 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
686 # Verify VOLTHA flows for ONU under test is Zero
687 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
688 ... ${onu_device_id} 0
689 # Disable and Re-Enable the ONU (To replicate DT current workflow)
690 # TODO: Delete and Auto-Discovery Add of ONU (not yet supported)
691 Disable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000692 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass91cc5292021-07-26 10:09:40 +0000693 ... Validate Device DISABLED UNKNOWN
694 ... REACHABLE ${src['onu']}
695 Enable Device ${onu_device_id}
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000696 Wait Until Keyword Succeeds 360s 5s
Hardik Windlass91cc5292021-07-26 10:09:40 +0000697 ... Validate Device ENABLED ACTIVE
698 ... REACHABLE ${src['onu']}
699 # Change the bandwidth profile and load the configuration
700 ${newBwName} Set Variable If ${oldBwName} == 'Default' 'User_Bandwidth2' 'Default'
701 ${cmd} Catenate
702 ... sed 's/upstreamBandwidthProfile": "${oldBwName}"/upstreamBandwidthProfile": "${newBwName}"/g'
703 ... ${CURDIR}/../../tests/data/${POD_NAME}-sadis-DT.json > ${CURDIR}/../../tests/data/${POD_NAME}-sadis-new.json
704 ${rc} Run and Return RC ${cmd}
705 Send File To Onos ${CURDIR}/../../tests/data/${POD_NAME}-sadis-new.json
706 # Re-add the subscriber with new bandwidth profile
707 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
708 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
709 # Verify subscriber access flows are added for the ONU port
710 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
711 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
712 ... ${onu_port} ${nni_port} ${src['s_tag']}
713 # Verify ONU state in voltha
714 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
715 ... ENABLED ACTIVE REACHABLE
716 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
717 # Verify Meters in ONOS
Hardik Windlass5d537ad2021-11-16 06:01:54 +0000718 Wait Until Keyword Succeeds ${timeout} 5s
Hardik Windlass91cc5292021-07-26 10:09:40 +0000719 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
Hardik Windlass3f75b602021-12-14 05:55:18 +0000720 # Workaround for issue seen in VOL-4489. Keep this workaround until VOL-4489 is fixed.
721 Run Keyword If ${has_dataplane} Reboot XGSPON ONU ${src['olt']} ${src['onu']} omci-flows-pushed
722 # Workaround ends here for issue seen in VOL-4489.
Hardik Windlass91cc5292021-07-26 10:09:40 +0000723 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
724 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
725 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
726 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
727 ... ${dst['container_name']}
728 # Verify new bandwidth profile is applied and other subscribers are working fine
729 ${checkBwName} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id} upstreamBandwidthProfile
730 Should Be Equal ${checkBwName} ${newBwName} The bandwidth profile is not updated properly
731 FOR ${I} IN RANGE 0 ${num_all_onus}
732 ${src}= Set Variable ${hosts.src[${I}]}
733 ${dst}= Set Variable ${hosts.dst[${I}]}
734 ${of_id}= Get ofID From OLT List ${src['olt']}
735 # Check for iperf3 and jq tools
736 ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf3 jq
737 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
738 Pass Execution If ${rc} != 0 Skipping test: iperf3 / jq not found on the RG
739
740 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Emrehan UZUNabef5182021-11-26 10:54:24 +0000741 ... ${of_id} ${src['uni_id']}
Hardik Windlass91cc5292021-07-26 10:09:40 +0000742 ${subscriber_id}= Set Variable ${of_id}/${onu_port}
743 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
744 ... upstreamBandwidthProfile
745 ${us_cir} ${us_cbs} ${us_pir} ${us_pbs} ${us_gir}= Get Bandwidth Profile Details Ietf Rest
746 ... ${bandwidth_profile_name}
747 ${limiting_bw_value_upstream}= Set Variable If ${us_pir} != 0 ${us_pir} ${us_gir}
748 ${bandwidth_profile_name} Get Bandwidth Profile Name For Given Subscriber ${subscriber_id}
749 ... downstreamBandwidthProfile
750 ${ds_cir} ${ds_cbs} ${ds_pir} ${ds_pbs} ${ds_gir}= Get Bandwidth Profile Details Ietf Rest
751 ... ${bandwidth_profile_name}
752 ${limiting_bw_value_dnstream}= Set Variable If ${ds_pir} != 0 ${ds_pir} ${ds_gir}
753
754 # Stream TCP packets from RG to server
755 ${updict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
756 ... args=-t 30
757 ${actual_upstream_bw_used}= Evaluate ${updict['end']['sum_received']['bits_per_second']}/1000
758
759 # Stream TCP packets from server to RG
760 ${dndict}= Run Iperf3 Test Client ${src} server=${dst['dp_iface_ip_qinq']}
761 ... args=-R -t 30
762 ${actual_dnstream_bw_used}= Evaluate ${dndict['end']['sum_received']['bits_per_second']}/1000
763
764 ${pct_limit_up}= Evaluate 100*${actual_upstream_bw_used}/${limiting_bw_value_upstream}
765 ${pct_limit_dn}= Evaluate 100*${actual_dnstream_bw_used}/${limiting_bw_value_dnstream}
766 Log Up: bwprof ${limiting_bw_value_upstream}Kbps, got ${actual_upstream_bw_used}Kbps (${pct_limit_up}%)
767 Log Down: bwprof ${limiting_bw_value_dnstream}Kbps, got ${actual_dnstream_bw_used}Kbps (${pct_limit_dn}%)
768
769 Should Be True ${pct_limit_up} <= ${upper_margin_pct}
770 ... The upstream bandwidth exceeded the limit (${pct_limit_up}% of limit)
771 # VOL-3125: downstream bw limit not enforced. Uncomment when fixed.
772 #Should Be True ${pct_limit_dn} <= ${upper_margin_pct}
773 #... The downstream bandwidth exceeded the limit (${pct_limit_dn}% of limit)
774 Should Be True ${pct_limit_up} >= ${lower_margin_pct}
775 ... The upstream bandwidth guarantee was not met (${pct_limit_up}% of resv)
776 Should Be True ${pct_limit_dn} >= ${lower_margin_pct}
777 ... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
778 END
779
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000780
781Test ONU Delete and Auto-Discovery for DT
782 [Documentation] Tests the voltctl delete and Auto-Discovery of the ONU
Andrea Campanella92e21b02022-01-04 15:32:04 +0100783 [Tags] functionalDt VOL-3098 ONUAutoDiscoveryDt
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000784 [Setup] Start Logging ONUAutoDiscoveryDt
785 [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
786 ... AND Stop Logging ONUAutoDiscoveryDt
787 Clear All Devices Then Create New Device
788 # Performing Sanity Test to make sure subscribers are all AUTH+DHCP and pingable
789 Run Keyword If ${has_dataplane} Clean Up Linux
790 Perform Sanity Test DT
791 FOR ${I} IN RANGE 0 ${num_all_onus}
792 ${src}= Set Variable ${hosts.src[${I}]}
793 ${dst}= Set Variable ${hosts.dst[${I}]}
794 ${onu_device_id}= Get Device ID From SN ${src['onu']}
795 ${of_id}= Get ofID From OLT List ${src['olt']}
Andrea Campanella92e21b02022-01-04 15:32:04 +0100796 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
797 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000798 ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
799 # Delete ONU and Verify Ping Fails
800 Delete Device ${onu_device_id}
801 Run Keyword If ${has_dataplane} Verify ping is successful except for given device
802 ... ${num_all_onus} ${src['onu']}
803 # Verify that no pending flows exist for the ONU port
804 Wait Until Keyword Succeeds ${timeout} 2s
805 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
806 # ONU Auto-Discovery
807 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000808 ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000809 # Check ONU port is Enabled in ONOS
810 Wait Until Keyword Succeeds ${timeout} 2s
Emrehan UZUNabef5182021-11-26 10:54:24 +0000811 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Hardik Windlassb75cf1b2021-01-18 06:59:09 +0000812 ${onu_device_id}= Get Device ID From SN ${src['onu']}
813 Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
814 # Verify ONU state in voltha
815 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
816 ... Validate Device ENABLED ACTIVE REACHABLE
817 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
818 # Verify that no pending flows exist for the ONU port
819 Wait Until Keyword Succeeds ${timeout} 2s
820 ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
821 # Verify subscriber access flows are added for the ONU port
822 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
823 ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
824 ... ${onu_port} ${nni_port} ${src['s_tag']}
825 # Verify Meters in ONOS
826 Wait Until Keyword Succeeds ${timeout} 5s
827 ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
828 Run Keyword If ${has_dataplane} Validate DHCP and Ping True
829 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
830 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
831 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
832 ... ${dst['container_name']}
833 END
834 # Verify flows for all OLTs
835 Wait Until Keyword Succeeds ${timeout} 5s Validate All OLT Flows
836
837
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000838*** Keywords ***
839Setup Suite
840 [Documentation] Set up the test suite
841 Common Test Suite Setup
Hung-Wei Chiucc6e6552020-06-04 12:57:38 -0700842 #Restore all ONUs
Suchitra Vemuria6879aa2020-11-03 11:03:11 -0800843 #Run Keyword If ${has_dataplane} RestoreONUs ${num_all_onus}
Suchitra Vemuri1d8e8172020-06-17 17:43:56 -0700844 #power_switch.robot needs it to support different vendor's power switch
845 ${switch_type}= Get Variable Value ${web_power_switch.type}
846 Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type}
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000847
848Clear All Devices Then Create New Device
849 [Documentation] Remove any devices from VOLTHA and ONOS
850 # Remove all devices from voltha and nos
851 Delete All Devices and Verify
852 # Execute normal test Setup Keyword
853 Setup
Girish Gowdrad2c0e9d2021-11-23 14:40:23 -0800854