blob: 3c90ac787bff56fbdcd97928f68a5af44cba47c0 [file] [log] [blame]
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -07001# 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 functional end-to-end scenarios for TT workflow
18Suite Setup Setup Suite
19Test Setup Setup
20Test Teardown Teardown
21Suite Teardown Teardown Suite
22Library Collections
23Library String
24Library OperatingSystem
25Library XML
26Library RequestsLibrary
27Library ../../libraries/DependencyLibrary.py
28Resource ../../libraries/onos.robot
29Resource ../../libraries/voltctl.robot
30Resource ../../libraries/voltha.robot
31Resource ../../libraries/utils.robot
32Resource ../../libraries/k8s.robot
33Resource ../../variables/variables.robot
34Resource ../../libraries/power_switch.robot
35
36*** Variables ***
37${POD_NAME} flex-ocp-cord
38${KUBERNETES_CONF} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
39${KUBERNETES_CONFIGS_DIR} ~/pod-configs/kubernetes-configs
40#${KUBERNETES_CONFIGS_DIR} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
41${KUBERNETES_YAML} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
42${HELM_CHARTS_DIR} ~/helm-charts
43${VOLTHA_POD_NUM} 8
44${NAMESPACE} voltha
Hardik Windlassa9b38262021-10-27 08:14:22 +000045${INFRA_NAMESPACE} default
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070046# 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
49${timeout} 60s
50${of_id} 0
51${logical_id} 0
52${has_dataplane} True
Hardik Windlass04896f62021-03-05 16:15:11 +053053${teardown_device} True
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070054${scripts} ../../scripts
55
56# Per-test logging on failure is turned off by default; set this variable to enable
57${container_log_dir} ${None}
58
Emrehan UZUN62748282021-05-21 08:16:52 +000059${suppressaddsubscriber} True
60
Hardik Windlassd8ecbef2021-10-19 06:12:16 +000061# logging flag to enable Voltha Components Logging, can be passed via the command line too
62# example: -v logging:False
63${logging} True
64
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070065*** Test Cases ***
66Reboot TT ONUs Physically - Clean Up
67 [Documentation] This test reboots ONUs physically before execution all the tests
68 ... Test case runs only on the PODs that are configured with PowerSwitch that
69 ... controls the power off/on ONUs/OLT remotely (simulating a physical reboot)
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +000070 [Tags] functionalTT PowerSwitch RebootAllTTONUs
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070071 [Setup] Start Logging RebootAllTTONUs
72 [Teardown] Run Keywords Collect Logs
73 ... AND Stop Logging RebootAllTTONUs
74 Power Switch Connection Suite ${web_power_switch.ip} ${web_power_switch.user} ${web_power_switch.password}
Suchitra Vemuri7255c002020-11-09 11:44:36 -080075 FOR ${I} IN RANGE 0 ${num_all_onus}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070076 ${src}= Set Variable ${hosts.src[${I}]}
77 ${dst}= Set Variable ${hosts.dst[${I}]}
78 Disable Switch Outlet ${src['power_switch_port']}
TorstenThieme2ed10502021-03-22 18:01:50 +000079 Sleep 10s
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070080 Enable Switch Outlet ${src['power_switch_port']}
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070081 END
82
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -070083Sanity E2E Test for TT (HSIA, VoD, VoIP)
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070084 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
85 ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
86 ... Traffic sent with same vlan from different RGs,
87 ... should reach the NNI port on the OLT with the expected double tagged vlan ids
88 ... Inner vlans from the RG should not change
89 [Tags] sanityTT
90 [Setup] Run Keywords Start Logging SanityTestTT
91 ... AND Setup
92 [Teardown] Run Keywords Collect Logs
93 ... AND Stop Logging SanityTestTT
94 Run Keyword If ${has_dataplane} Clean Up Linux
95 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT
Suchitra Vemuri32dea012020-07-08 16:40:06 -070096 #Run Keyword If ${has_dataplane} Clean Up Linux
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -070097
Suchitra Vemuri85cb7d62020-07-16 23:46:16 -070098Sanity E2E Test for TT (MCAST)
99 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
100 ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
101 ... Traffic sent with same vlan from different RGs,
102 ... should reach the NNI port on the OLT with the expected double tagged vlan ids
103 ... Inner vlans from the RG should not change
104 [Tags] sanityTT-MCAST
105 [Setup] Run Keyword Start Logging SanityTestTT-MCAST
106 [Teardown] Run Keywords Collect Logs
107 ... AND Stop Logging SanityTestTT-MCAST
108 Run Keyword If ${has_dataplane} Clean Up Linux
109 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT MCAST
110
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000111Test Disable and Delete OLT for TT
112 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
113 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanityTt test was executed)
114 ... Perform disable on the OLT and validate ONUs state and that the pings do not succeed
115 ... Perform delete on the OLT, Re-do Setup (Recreate the OLT) and Perform Sanity Test TT
Huseyin Ahmet AYDIN45922c82021-05-27 12:37:32 +0000116 [Tags] functionalTT DisableDeleteOLTTt
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000117 [Setup] Start Logging DisableDeleteOLTTt
118 [Teardown] Run Keywords Collect Logs
119 ... AND Stop Logging DisableDeleteOLTTt
Huseyin Ahmet AYDIN45922c82021-05-27 12:37:32 +0000120 @{particular_onu_device_port}= Create List
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000121 FOR ${I} IN RANGE 0 ${num_all_onus}
122 ${src}= Set Variable ${hosts.src[${I}]}
123 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
124 ... ${of_id} ${src['uni_id']}
125 Append To List ${particular_onu_device_port} ${onu_port}
126 END
127 ${list_onu_port}= Remove Duplicates ${particular_onu_device_port}
128 ${num_of_provisioned_onus}= Get Length ${list_onu_port}
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000129 # Disable and Validate OLT Device
130 FOR ${I} IN RANGE 0 ${olt_count}
131 ${olt_serial_number}= Get From Dictionary ${olt_ids}[${I}] sn
132 ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
133 Disable Device ${olt_device_id}
134 ${of_id}= Get ofID From OLT List ${olt_serial_number}
135 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
136 ... Validate OLT Device DISABLED UNKNOWN REACHABLE
137 ... ${olt_serial_number}
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000138 ${num_onus}= Set Variable ${list_olts}[${I}][onucount]
139 # Validate ONUs
140 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONUs After OLT Disable
141 ... ${num_onus} ${olt_serial_number}
142 # Verify ONOS Flows
Huseyin Ahmet AYDIN45922c82021-05-27 12:37:32 +0000143 # Number of Access Flows on ONOS equals 16 * the Number of Active ONUs + 3 for default LLDP, IGMP and DHCP
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000144 ${onos_flows_count}= Run Keyword If ${has_dataplane} Evaluate 16 * ${num_of_provisioned_onus} + 3
145 ... ELSE Evaluate 15 * ${num_of_provisioned_onus} + 3
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000146 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
Huseyin Ahmet AYDIN45922c82021-05-27 12:37:32 +0000147 ... Verify Added Flow Count for OLT TT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
148 ... ${onos_flows_count}
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000149 # Verify VOLTHA Flows
Huseyin Ahmet AYDIN45922c82021-05-27 12:37:32 +0000150 # Number of per OLT Flows equals 10 * Number of Active ONUs + 3 for default LLDP, IGMP and DHCP
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000151 ${olt_flows}= Run Keyword If ${has_dataplane} Evaluate 10 * ${num_of_provisioned_onus} + 3
152 ... ELSE Evaluate 9 * ${num_of_provisioned_onus} + 3
Huseyin Ahmet AYDIN45922c82021-05-27 12:37:32 +0000153 # Number of per ONU Flows equals 6 for 3play service data plane + 4 for Trap to Host Flows
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000154 ${onu_flows}= Run Keyword If ${has_dataplane} Set Variable 10
155 ... ELSE Set Variable 9
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000156 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
157 ... ${olt_device_id}
158 ${List_ONU_Serial} Create List
159 Set Suite Variable ${List_ONU_Serial}
160 Build ONU SN List ${List_ONU_Serial} ${olt_serial_number} ${num_onus}
161 Log ${List_ONU_Serial}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000162 # TODO: Fix ${onu_flows} calculations based on UNIs provisioned
163 # Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
164 # ... ${List_ONU_Serial} ${onu_flows}
Huseyin Ahmet AYDIN9ea27aa2021-05-20 14:32:29 +0000165 # Delete OLT and Validate Empty Device List
166 Delete Device ${olt_device_id}
167 # Check that the OLT and the ONUs are actually removed from the system
168 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed
169 ... ${olt_serial_number}
170 Run Keyword and Continue On Failure Validate all ONUS for OLT Removed ${num_all_onus} ${hosts}
171 ... ${olt_serial_number} ${timeout}
172 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
173 ... Verify Device Flows Removed ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
174 END
175 # Re-do Setup (Recreate the OLT) and Perform Sanity Test TT
176 Run Keyword Setup
177 Run Keyword If ${has_dataplane} Clean Up Linux
178 Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Tests TT
179
Emrehan UZUN62748282021-05-21 08:16:52 +0000180Verify re-provisioning subscriber after removing provisoned subscriber for TT
181 [Documentation] Removing/Readding a particular subscriber should have no effect on any other subscriber.
182 [Tags] functionalTT Readd-subscriber-TT
183 [Setup] Start Logging Readd-subscriber-TT
184 [Teardown] Run Keywords Collect Logs
185 ... AND Stop Logging Readd-subscriber-TT
186 Run Keyword If ${has_dataplane} Clean Up Linux
187 FOR ${I} IN RANGE 0 ${num_all_onus}
188 ${src}= Set Variable ${hosts.src[${I}]}
189 ${dst}= Set Variable ${hosts.dst[${I}]}
190 ${service_type}= Get Variable Value ${src['service_type']} "null"
191 ${of_id}= Get ofID From OLT List ${src['olt']}
192 ${onu_device_id}= Get Device ID From SN ${src['onu']}
193 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000194 ... ${of_id} ${src['uni_id']}
Emrehan UZUN62748282021-05-21 08:16:52 +0000195 # Remove Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000196 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Emrehan UZUN62748282021-05-21 08:16:52 +0000197 ... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
198 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast'
199 ... Wait Until Keyword Succeeds ${timeout} 2s
200 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
201 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
202 # Verify VOLTHA flows for ONU under test is Zero
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000203 # TODO: Fix ${onu_flows} calculations based on UNIs provisioned
204 # Wait Until Keyword Succeeds ${timeout} 5s Validate Device Flows
205 # ... ${onu_device_id} 0
Emrehan UZUN62748282021-05-21 08:16:52 +0000206 # Add Subscriber Access
TorstenThieme4e2168e2021-06-22 14:01:47 +0000207 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
Emrehan UZUN62748282021-05-21 08:16:52 +0000208 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
209 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 360s 5s
210 ... Validate Device ENABLED ACTIVE
211 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-flows-pushed
212 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
213 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT one ONU ${src}
214 ... ${dst} ${suppressaddsubscriber}
215 ... ELSE IF ${has_dataplane} and '${service_type}' == 'mcast' Run Keyword And Continue On Failure
216 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT MCAST one ONU ${src}
217 ... ${dst} ${suppressaddsubscriber}
218 END
219
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000220Test Disable and Enable ONU for TT
221 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
222 ... Assuming that all the ONUs are DHCP/pingable (i.e. assuming sanitytt test was executed)
223 ... Perform disable on the ONUs and validate that the pings do not succeed
224 ... Perform enable on the ONUs and validate that the pings are successful
225 [Tags] functionalTT DisableEnableONUTT
226 [Setup] Start Logging DisableEnableONUTT
227 [Teardown] Run Keywords Collect Logs
228 ... AND Stop Logging DisableEnableONUTT
229 FOR ${I} IN RANGE 0 ${num_all_onus}
230 ${src}= Set Variable ${hosts.src[${I}]}
231 ${dst}= Set Variable ${hosts.dst[${I}]}
232 ${service_type}= Get Variable Value ${src['service_type']} "null"
233 ${of_id}= Get ofID From OLT List ${src['olt']}
234 ${onu_device_id}= Get Device ID From SN ${src['onu']}
235 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
Hardik Windlass1ed2eee2021-06-25 09:51:03 +0000236 ... ${of_id} ${src['uni_id']}
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000237 Disable Device ${onu_device_id}
238 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
239 ... Validate Device DISABLED UNKNOWN
240 ... REACHABLE ${src['onu']} onu=True onu_reason=omci-admin-lock
241 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000242 ... Verify UNI Port Is Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000243 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
244 ... Wait Until Keyword Succeeds 60s 2s
245 ... Check Ping False ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
246 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
247 Sleep 5s
248 Enable Device ${onu_device_id}
249 Run Keyword If ${has_dataplane} and '${service_type}' == 'mcast' Clean Up Linux
250 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Hardik Windlass39015672021-07-05 05:48:08 +0000251 ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
Emrehan UZUNec59bea2021-05-27 13:45:57 +0000252 Run Keyword If ${has_dataplane} and '${service_type}' != 'mcast' Run Keyword And Continue On Failure
253 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT one ONU ${src}
254 ... ${dst} ${suppressaddsubscriber}
255 ... ELSE IF ${has_dataplane} and '${service_type}' == 'mcast' Run Keyword And Continue On Failure
256 ... Wait Until Keyword Succeeds ${timeout} 2s Sanity Test TT MCAST one ONU ${src}
257 ... ${dst} ${suppressaddsubscriber}
258 END
259
Suchitra Vemuri2f1e07d2020-06-26 19:18:01 -0700260*** Keywords ***
261Setup Suite
262 [Documentation] Set up the test suite
263 Common Test Suite Setup
264 ${switch_type}= Get Variable Value ${web_power_switch.type}
265 Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type}
266
267
268Clear All Devices Then Create New Device
269 [Documentation] Remove any devices from VOLTHA and ONOS
270 # Remove all devices from voltha and nos
271 Delete All Devices and Verify
272 # Execute normal test Setup Keyword
273 Setup
274
Suchitra Vemuri32dea012020-07-08 16:40:06 -0700275
276Teardown Suite
277 [Documentation] Tear down steps for the suite
278 Run Keyword If ${has_dataplane} Clean Up Linux
Hardik Windlass04896f62021-03-05 16:15:11 +0530279 Run Keyword If ${teardown_device} Delete All Devices And Verify
TorstenThieme4e2168e2021-06-22 14:01:47 +0000280 Close All ONOS SSH Connections