blob: 7afefc4787cc645a7f67c5799da63aa574cef99f [file] [log] [blame]
Suchitra Vemuri3f8b0f62019-09-12 13:25:16 -07001#Copyright 2017-present Open Networking Foundation
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -07002#
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
Matteo Scandolo1294aeb2019-09-24 16:20:32 -070015# FIXME Can we use the same test against BBSim and Hardware?
16
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070017*** Settings ***
Zack Williamsec53a1b2019-09-16 15:50:52 -070018Documentation Test various end-to-end scenarios
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070019Suite Setup Setup Suite
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070020Test Setup Setup
21Test Teardown Teardown
Andy Bavierba9866b2019-10-11 07:11:53 -070022Suite Teardown Teardown Suite
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070023Library Collections
24Library String
25Library OperatingSystem
26Library XML
27Library RequestsLibrary
Andy Bavierba9866b2019-10-11 07:11:53 -070028Library ../../libraries/DependencyLibrary.py
Suchitra Vemurib8ed2d52019-09-30 13:22:51 -070029Resource ../../libraries/onos.robot
30Resource ../../libraries/voltctl.robot
31Resource ../../libraries/utils.robot
Andy Bavierba9866b2019-10-11 07:11:53 -070032Resource ../../libraries/k8s.robot
Suchitra Vemurib8ed2d52019-09-30 13:22:51 -070033Resource ../../variables/variables.robot
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070034
35*** Variables ***
Zack Williamsec53a1b2019-09-16 15:50:52 -070036${POD_NAME} flex-ocp-cord
37${KUBERNETES_CONF} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
38${KUBERNETES_CONFIGS_DIR} ~/pod-configs/kubernetes-configs
39#${KUBERNETES_CONFIGS_DIR} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
40${KUBERNETES_YAML} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
41${HELM_CHARTS_DIR} ~/helm-charts
42${VOLTHA_POD_NUM} 8
suraj gourd64356b2019-11-07 13:26:20 +000043${NAMESPACE} voltha
44# For below variable value, using deployment name as using grep for
45# parsing radius pod name, we can also use full radius pod name
46${RESTART_POD_NAME} radius
Andy Bavierba9866b2019-10-11 07:11:53 -070047${timeout} 60s
Zack Williamsec53a1b2019-09-16 15:50:52 -070048${of_id} 0
49${logical_id} 0
Andy Bavierba9866b2019-10-11 07:11:53 -070050${has_dataplane} True
51${external_libs} True
52${teardown_device} False
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070053
54*** Test Cases ***
55Sanity E2E Test for OLT/ONU on POD
56 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
57 ... Validate successful authentication/DHCP/E2E ping for the tech profile that is used
Andy Bavierba9866b2019-10-11 07:11:53 -070058 [Tags] sanity test1
Suchitra Vemuri6db89412019-11-14 14:52:54 -080059 [Teardown] NONE
Andy Bavierba9866b2019-10-11 07:11:53 -070060 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
61 Set Global Variable ${of_id}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070062
63 FOR ${I} IN RANGE 0 ${num_onus}
64 ${src}= Set Variable ${hosts.src[${I}]}
65 ${dst}= Set Variable ${hosts.dst[${I}]}
66
Gilles Depatieb5682f82019-10-31 10:39:45 -040067 Wait Until Keyword Succeeds ${timeout} 5s Validate Device ENABLED ACTIVE REACHABLE
68 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070069
70 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Gilles Depatie675a2062019-10-22 12:44:42 -040071 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
72 ... ${of_id}
73 Wait Until Keyword Succeeds ${timeout} 2s Verify Eapol Flows Added For ONU ${k8s_node_ip}
74 ... ${ONOS_SSH_PORT} ${onu_port}
75 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate Authentication True
76 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070077 ... ${src['container_type']} ${src['container_name']}
Gilles Depatie675a2062019-10-22 12:44:42 -040078 Wait Until Keyword Succeeds ${timeout} 2s Verify ONU in AAA-Users ${k8s_node_ip}
79 ... ${ONOS_SSH_PORT} ${onu_port}
80 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command ${k8s_node_ip}
81 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
82 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
83 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
84 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
85 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
86 ... ${dst['container_name']}
Suchitra Vemuri87f1d7f2019-11-12 15:03:48 -080087 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Gilles Depatie675a2062019-10-22 12:44:42 -040088 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
Suchitra Vemuri1a970a62019-11-26 12:52:16 -080089 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
Suchitra Vemuri582574b2019-12-10 21:11:54 -080090 Run Keyword and Ignore Error Collect Logs
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070091 END
Suchitra Vemuri582574b2019-12-10 21:11:54 -080092 Run Keyword and Ignore Error Collect Logs
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070093
Suchitra Vemuri6db89412019-11-14 14:52:54 -080094Test Disable and Enable ONU
95 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
96 ... Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
97 ... Perform disable on the ONUs and validate that the pings do not succeed
98 ... Perform enable on the ONUs and validate that the pings are successful
Suchitra Vemuri582574b2019-12-10 21:11:54 -080099 [Tags] functional DisableEnableONU
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800100 [Setup] None
suraj gour7f6d5fe2019-11-29 10:56:35 +0000101 [Teardown] None
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800102
103 FOR ${I} IN RANGE 0 ${num_onus}
104 ${src}= Set Variable ${hosts.src[${I}]}
105 ${dst}= Set Variable ${hosts.dst[${I}]}
106
107 ${onu_device_id}= Get Device ID From SN ${src['onu']}
108 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
109 ... ${of_id}
110 Disable Device ${onu_device_id}
111 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s Check Ping False ${dst['dp_iface_ip_qinq']}
112 ... ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
113 Enable Device ${onu_device_id}
114 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
115 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
116 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s Check Ping True ${dst['dp_iface_ip_qinq']}
117 ... ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
Suchitra Vemuri582574b2019-12-10 21:11:54 -0800118 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
119 Run Keyword and Ignore Error Collect Logs
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800120 END
Suchitra Vemuri582574b2019-12-10 21:11:54 -0800121 Run Keyword and Ignore Error Collect Logs
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800122
suraj gourd64356b2019-11-07 13:26:20 +0000123Check OLT/ONU Authentication After Radius Pod Restart
suraj gour7f6d5fe2019-11-29 10:56:35 +0000124 [Documentation] After radius restart, triggers reassociation, checks status and
125 ... authentication, validates dhcp and ping. Note : wpa reassociate works only when
126 ... wpa supplicant is running in background hence it is recommended to remove
127 ... teardown from previous test or uncomment 'Teardown None'.
128 ... Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
Suchitra Vemuri582574b2019-12-10 21:11:54 -0800129 [Tags] functional RadiusRestart
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800130 [Setup] NONE
suraj gourd64356b2019-11-07 13:26:20 +0000131 Wait Until Keyword Succeeds ${timeout} 15s Restart Pod ${NAMESPACE} ${RESTART_POD_NAME}
132
133 FOR ${I} IN RANGE 0 ${num_onus}
134 ${src}= Set Variable ${hosts.src[${I}]}
135 ${dst}= Set Variable ${hosts.dst[${I}]}
136
137
138 ${onu_device_id}= Get Device ID From SN ${src['onu']}
139 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
140 ... ${of_id}
141 Wait Until Keyword Succeeds ${timeout} 2s Verify Eapol Flows Added For ONU ${k8s_node_ip}
142 ... ${ONOS_SSH_PORT} ${onu_port}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000143 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate Authentication After Reassociate
144 ... True ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']}
suraj gourd64356b2019-11-07 13:26:20 +0000145 ... ${src['container_type']} ${src['container_name']}
146 Wait Until Keyword Succeeds ${timeout} 2s Verify ONU in AAA-Users ${k8s_node_ip}
147 ... ${ONOS_SSH_PORT} ${onu_port}
148 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
149 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
150 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
151 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
152 ... ${dst['container_name']}
153 Wait Until Keyword Succeeds ${timeout} 2s Run Keyword And Continue On Failure
154 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
Suchitra Vemuri582574b2019-12-10 21:11:54 -0800155 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
156 Run Keyword and Ignore Error Collect Logs
suraj gourd64356b2019-11-07 13:26:20 +0000157 END
Suchitra Vemuri582574b2019-12-10 21:11:54 -0800158 Run Keyword and Ignore Error Collect Logs
suraj gourd64356b2019-11-07 13:26:20 +0000159
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700160*** Keywords ***
161Setup Suite
Andy Bavier88cd9f62019-11-26 16:22:33 -0700162 [Documentation] Set up the test suite
163 Common Test Suite Setup
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700164
165Setup
Zack Williamsec53a1b2019-09-16 15:50:52 -0700166 [Documentation] Pre-test Setup
Gilles Depatieb5682f82019-10-31 10:39:45 -0400167 #test for empty device list
168 ${length}= Test Empty Device List
169 Should Be Equal As Integers ${length} 0
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700170 #create/preprovision device
Suchitra Vemuric59eb272019-09-18 17:59:33 -0700171 ${olt_device_id}= Create Device ${olt_ip} ${OLT_PORT}
172 Set Suite Variable ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400173 #validate olt states
174 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN
175 ... ${EMPTY} ${olt_device_id}
Suchitra Vemuric59eb272019-09-18 17:59:33 -0700176 Enable Device ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400177 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
178 ... ${olt_serial_number}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700179 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
180 Set Suite Variable ${logical_id}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700181
182Teardown
183 [Documentation] kills processes and cleans up interfaces on src+dst servers
Suchitra Vemuri582574b2019-12-10 21:11:54 -0800184 Run Keyword If ${has_dataplane} Clean Up Linux
185 Run Keyword If ${external_libs} Log Kubernetes Containers Logs Since Time ${datetime} ${container_list}
186
187Collect Logs
188 [Documentation] Collect Logs from voltha and onos cli for various commands
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800189 Run Keyword and Ignore Error Get Device List from Voltha
190 Run Keyword and Ignore Error Get Device Output from Voltha ${olt_device_id}
191 Run Keyword and Ignore Error Get Logical Device Output from Voltha ${logical_id}
Andy Bavierba9866b2019-10-11 07:11:53 -0700192 Run Keyword If ${external_libs} Get ONOS Status ${k8s_node_ip}
Andy Bavierba9866b2019-10-11 07:11:53 -0700193
194Teardown Suite
195 [Documentation] Clean up device if desired
196 Run Keyword If ${teardown_device} Delete Device and Verify
Andy Bavier44e84fe2019-12-10 10:23:15 -0700197 ${length}= Run Keyword If ${teardown_device} Test Empty Device List
Gilles Depatieb5682f82019-10-31 10:39:45 -0400198 Run Keyword If ${teardown_device} Should Be Equal As Integers ${length} 0
Andy Bavierba9866b2019-10-11 07:11:53 -0700199 Run Keyword If ${teardown_device} Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
200 ... device-remove ${of_id}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700201
Gilles Depatieb5682f82019-10-31 10:39:45 -0400202
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700203Clean Up Linux
204 [Documentation] Kill processes and clean up interfaces on src+dst servers
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -0700205 FOR ${I} IN RANGE 0 ${num_onus}
206 ${src}= Set Variable ${hosts.src[${I}]}
207 ${dst}= Set Variable ${hosts.dst[${I}]}
208 Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src['ip']}
209 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
210 Run Keyword And Ignore Error Kill Linux Process [d]hclient ${src['ip']}
211 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
212 Run Keyword If '${dst['ip']}' != '${None}' Run Keyword And Ignore Error
213 ... Kill Linux Process [d]hcpd ${dst['ip']} ${dst['user']}
214 ... ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
215 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
216 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
217 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
218 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
219 ... ${dst['container_type']} ${dst['container_name']}
220 END
Andy Bavierba9866b2019-10-11 07:11:53 -0700221
222Delete Device and Verify
223 [Documentation] Disable -> Delete devices via voltctl and verify its removed
Andy Bavierba9866b2019-10-11 07:11:53 -0700224 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
225 Should Be Equal As Integers ${rc} 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400226 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
227 ... ${olt_serial_number}
Andy Bavierba9866b2019-10-11 07:11:53 -0700228 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device delete ${olt_device_id}
229 Should Be Equal As Integers ${rc} 0
230 Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}